【发布时间】:2009-04-29 08:47:12
【问题描述】:
假设我们有以下代码:
int main(){
int a[3]={1,2,3};
printf(" E: 0x%x\n", a);
printf(" &E[2]: 0x%x\n", &a[2]);
printf("&E[2]-E: 0x%x\n", &a[2] - a);
return 1;
}
编译运行结果如下:
E: 0xbf8231f8
&E[2]: 0xbf823200
&E[2]-E: 0x2
我理解 &E[2] 的结果,即 8 加上数组的地址,因为索引为 2 并且类型为 int(在我的 32 位系统上为 4 个字节),但我不能不知道为什么最后一行是 2 而不是 8?
另外,最后一行应该是什么类型——整数还是整数指针?
我想知道是不是 C 类型系统(有点强制转换)造成了这个怪癖?
【问题讨论】:
-
printf(" E: 0x%x\n", &a); 怎么样