最后两条语句有什么区别:
int a[20];
int *b=a;
int *c=&a;
我认为两者都是一样的,但在最近的一次采访中,面试官很想知道我不知道的区别。
有人可以用详细的例子解释一下。
我去了这篇文章但不理解数组相关部分: 函数指针和函数地址
int a[20];
a
您正在声明一个可以容纳20
int的数组
int *b=a;
由于a
是一个数组,a
因此计算为数组的基地址a
(即 的第一个元素a
)。指向数组中第一个元素b
的指针也是如此int
a
int *c=&a;
&a
表示a
分配给int
指针的地址c
。但是,这并不像&a
数组的地址(不是数组的基地址)那样好,因此您应该定义c
为int **
(即指向指针的指针)或将其分配给&a[0]
(即数组的第一个元素的地址a
)。由于数组被分配了连续的内存,一旦你有了数组的基地址,你就可以通过*(b+i)
wherei
是你想要访问的元素的索引来轻松地访问数组的剩余元素。
然而,
int a = 5;
int *b= a ; // WRONG -- b will not point to the address of variable a, but to the memory location 5, which is what you do not want
int *c = &a; //CORRECT