【发布时间】:2014-05-04 11:19:31
【问题描述】:
我正在尝试掌握 C 中的指针,并且正在努力理解为什么我会得到一个奇怪的输出。
我的代码是:
int main(){
int a[3][6];
int i,j,k = 0;
for(i = 0; i < 3; i++){
for (j = 0; j < 6; j++) {
a[i][j] = k++;
}
}
int c = 5;
int *p = &c;
printf("address of p = %p\n",&p);
printf("p = %p\n",p);
printf("address of c = %p\n",&c);
printf("address of a[2] = %p\n", &a[2]);
printf("address of a[2][0] = %p\n", &a[2][0]);
printf("a[2] = %p\n", a[2]);
printf("a[2][0] = %d\n",a[2][0]);
return 0;
}
我得到的输出是:
address of p = 0x7fff6cbabf88
p = 0x7fff6cbabf90
address of c = 0x7fff6cbabf90
address of a[2] = 0x7fff6cbabf70
address of a[2][0] = 0x7fff6cbabf70
a[2] = 0x7fff6cbabf70
a[2][0] = 12
这似乎表明a[2] == &a[2],但这肯定不正确吗?
【问题讨论】:
-
a[2]的类型为int[6];&a[2]的类型为int (*)[6]。如果你有一个指向人的指针和一个指向火车的指针;把人放在火车里……两个指针都指向同一个东西吗???? -
头脑 == 炸了!好困惑
-
如果您要求上面的指针指向下一件事,它们将指向完全不同的方向(下一个人与下一趟火车)。我的意思是,指针由它们指向的地址和类型来标识。
-
我认为我的问题是我正在尝试使用不是指针的数组名称进行指针运算。
-
@lurker:
a[n]和&a[n]不是同义词!第一个是数组(检查sizeof a[n]),第二个是指针(检查sizeof &a[n])。数组有时会转换为指向其第一个元素的指针。 转换发生时a[n]是&a[n][0]的同义词。
标签: c pointers multidimensional-array