数组下标还可以这样使用?
来源:互联网 发布:上海数据港 ipo 编辑:程序博客网 时间:2024/06/06 05:17
先看看下面这段代码
#include<stdio.h>
int main(){
unsigned char result = 1["night"]*2["girls"]+4["allnight"];
char *of_you = "Though you was strong enough and seem never died";
printf("You got %s", result+of_you);
return 0;
}
请问打印的内容是什么?下面这段代码打印的内容又是什么呢?
#include<stdio.h>
int main(){
unsigned char result = "night"[1]*"girls"[2]+"allnight"[4];
char *of_you = "Though you was strong enough and seem never died";
printf("You got %s", result+of_you);
return 0;
}
分析:
数组元素的下标可以放在[]前面,而数组名放在[]中间
int a[10]={0,1,2,3,4,5,6,7,8,9};
a[0]与0[a]是一样的,都是0。
实际上,只要是形如 a[b] 形式的基本上都可以看成是数组, 其中a为基址,[] 里面的b 为偏移量, 数组里的元素就是靠index = base + offset 来索引(基址与偏移量都是值,没有差异,所以位置可以互换,index为内存地址),所以说上面的两段代码,都是这个特例,第一个元素都是基址,而第二个元素都是用[]扩起,那么它就是偏移量,只是常量字符串它的值为他的首地址,地址也是一个值(c语言是只是传值),所以进一步推广,这里的a、b 可以是求值表达式,那么上述两个例子的行为就在情理之中了。
下面再给出 linux/fs/namei.c 中的一个例子 :
#define ACC_MODE(x) ("/004/002/006/377"[(x)&O_ACCMODE])
这个宏 ""里面的就是一个四个元素的字符串,他就是基址,后面[]里面的求值表达式即为偏移量,他可以看成一个广义数组, 所以就可以根据[]的偏移量索引基址所在地址的值。从这里可以进一步看出,只要你能够以某种方式给出内存的地址,那么那个地址的值就能够访问,形如 a[b] 的数组的功能,就是访问给定地址单元的值。如果能从汇编语言的角度考虑就更好理解了, 即:如果你要访问某个元素,你首先要知道这个元素所在的内存地址,数组的功能就是找到这个地址(自动把基址与偏移量相加)。
所以 ,1["night"]就是*("night"+1),也就是'i',ascii码为105
类似,2["girls"]是'l'(114)
4["allnight"]是'i'(105)
result=(105*114+105)%256=43
result+of_you=43+"Though you was strong enough and seem never died"
指向第43个字符开始的字符串。
- 数组下标还可以这样使用?
- 数组原来还可以这样初始化【转】
- Vector数组可以使用下标直接访问
- 原来还可以这样,原来还可以这样。原来还可以这样,原来还可以这样,原来还可以这样
- 关联数组(数组下标索引不仅仅为数字还可以是字符串等)
- ASP还可以这样写!
- malloc还可以这样用
- php还可以这样优化??
- Json还可以这样用
- Update还可以这样用
- Replication还可以这样玩
- Json还可以这样用
- 图片,还可以这样玩儿
- misc还可以这样安装
- CSS还可以这样做
- 非左值数组可以具有下标
- 图还可以这样存——邻接表的数组实现
- 算法8:图还可以这样存——邻接表的数组实现
- SHA1加密
- MyEclipse AJAX 调试教程
- DirectShow 学习(一) COM实现部分和部分辅助源码浅读
- 【转】用命令行关闭端口
- DirectShow学习(二)CBasePin类、CBaseOutputPin类和CBaseInputPin类源代码解析
- 数组下标还可以这样使用?
- 删除SQLSERVER中的临时表
- WCF服务的程序字符串过长...
- DirectShow 学习(三) CBaseFilter类源代码解析
- 子午学术论坛邀请注册码
- 开心网很火了 我给大家一个开心网注册的地址
- DirectShow 学习(四) 部分Helper Classes类源代码分析
- 命令行更改IP安全策略工具(ipseccmd)
- DirectShow 学习(五) CSource类和其一个具体实现例子的源代码分析