关于c指针和*&的问题运营商

时间:2010-10-13 22:37:51

标签: c pointers

假设我在程序中有这行代码:

int * number=0;
int mystery=&6[number];

Mistery是一个数字,我可以使用& 5或& 4获得其他数字。

但“& 6 []”是什么意思?

谢谢!

5 个答案:

答案 0 :(得分:6)

6[number]完全等同于number[6],因此您将获得距离number六个整数的地址。由于数字为0int长度为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