假设我在程序中有这行代码:
int * number=0;
int mystery=&6[number];
Mistery是一个数字,我可以使用& 5或& 4获得其他数字。
但“& 6 []”是什么意思?
谢谢!
答案 0 :(得分:6)
6[number]
完全等同于number[6]
,因此您将获得距离number
六个整数的地址。由于数字为0
且int
长度为4个字节,因此结果为24
。
答案 1 :(得分:5)
6[variable]
是表达variable[6]
的另一种不太可读的方式。它的作用是因为加法的可交换性:variable[6]
与*(variable + 6)
相同,因此6[variable]
与*(6 + variable)
相同。
答案 2 :(得分:1)
我必须指出*(variable + 6)
不像<{1}}那样 ,这只是因为编译器知道变量引用的对象的大小({{1}大小是4个字节),所以真正发生的是添加指针:
variable[6]
。它只是由编译器抽象而已。
我不太确定(更重要的是,它可能取决于编译器),但是对于结构数组,这可能不起作用,因为int
的大小是variable + 6*sizeof(int)
的两倍:
struct a { int a; int b; }; struct a arr[5]; int nmb; struct a *res = nmb[arr]
答案 3 :(得分:0)
这看起来像C的令人作呕的a[0] == 0[a]
“特征”,因此您可以将其视为“数组编号中索引6的地址”
答案 4 :(得分:0)
6[number]
与number[6]
相同。
这被解释为第六个元素(*(number + 6*sizeof(int))
)的值,因为number
为零且sizeof(int)
通常为4
,那么它的地址为{{{ 1}}。
24
然后获取地址&
处的值的地址,因此24
等于mystery
。
[编辑] 24
通常为4个字节,因此正确的值为int
。