【发布时间】:2013-11-02 19:54:41
【问题描述】:
我认为数组和指针基本上是一回事,直到我运行这个程序:
int main() {
int* a = new int(19);
int b[1];
b[0] = 19;
printf("*a: %d\n a: %p\n &a:%p\n", *a, a, &a);
printf("*b: %d\n b: %p\n &b:%p\n", *b, b, &b);
delete a;
}
输出是:
*a: 19
a: 0x7f94524000e0
&a:0x7fff51b71ab8
*b: 19
b: 0x7fff51b71ab4
&b:0x7fff51b71ab4
谁能解释一下为什么 &b 的输出和 b 一样?
谢谢! -尔本
【问题讨论】:
-
这种数组是指程序中的死内存,与指针不同。指针可以指向任何地址。另一件事:如果您使用
int tab[n][m],则不能将其与int **ptr一起使用,但与int *ptr一起使用-> 编译器会将对tab[i][j]的调用替换为tab[i * m + j]。