(int) (&array)[2];的含义

int array[]={1,2,3} ;
k = (int) (&array)[2];
printf("%d\n", k);
printf("%d %d %d\n",array[0],array[1],array[2]);
打印输出
-4197632
22 24 6
请问这里 (int) (&array)[2];是表示取出array数组第三个元素的地址?为什么还需要加一个(int)类型转换?谢谢!

(&array)[2] 就相当于*(&array+2)
array已经是表示数组的首地址了前面加个array就是对一个地址取地址,,这样的做法不是很好
相当于:
int (*p)[2]; //指向一维数组的指针
p=&array;
(&array)[2]相当于p[2],相当于*(p+2) ,是一个地址,所以要强制类型转换
p+1的跨度是sizeof(array)=12个字节
*(p+2)就相当于array数组的首地址加上24=18H
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-09-05
array是数组类型(暂且这么叫他),&array是array数组(长度为3)的首地址,
(&array)[2]就是第三个数组(从array开始,向后挪三个数组长度)。
int k=(&array)[2]就等于&array + 3*3。
如果把这个数组类型改成int *类型,那么他会向后挪三个int长度,如
int *p=&array;
int k=p[2];这里k就等于3本回答被提问者采纳
第2个回答  2011-09-05
这个已经是非法操作内存了。array 这个数组名就是数组的首地址了。这个值应该保存在常量区域的内存中。然后你又通过&取地址符号,取了常量区域的内存地址,然后 (&array)[2]相当于在在这个常量区域的地址+2后获取了了一个与array一点关系都没有的地址值。(这个的说法就是array这个地址的值需要有个存储空间,你获得了这个地址存储空间的地址,然后再将这个地址空间+2,然后获取了+2后存储空间里的内容)。
反正就是要获取array三个元素,只要array[0],array[1],array[2]就可以了。
还有最后输出应该不会是22 24 6.因为你不可能改变array这个地址的值。所以还是应该是1,2,3
第3个回答  2011-09-05
错了
相似回答