0

最后两条语句有什么区别:

int a[20];
int *b=a;
int *c=&a;

我认为两者都是一样的,但在最近的一次采访中,面试官很想知道我不知道的区别。

有人可以用详细的例子解释一下。

我去了这篇文章但不理解数组相关部分: 函数指针和函数地址

4

1 回答 1

0
int a[20];

a您正在声明一个可以容纳20int的数组

int *b=a;

由于a是一个数组,a因此计算为数组的基地址a(即 的第一个元素a)。指向数组中第一个元素b的指针也是如此inta

int *c=&a;

&a表示a分配给int指针的地址c。但是,这并不像&a数组的地址(不是数组的基地址)那样好,因此您应该定义cint **(即指向指针的指针)或将其分配给&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
于 2013-05-07T03:33:01.347 回答