最后两条语句有什么区别:
int a[20];
int *b=a;
int *c=&a;
我认为两者都是一样的,但在最近的一次采访中,面试官很想知道我不知道的区别。
有人可以用详细的例子解释一下。
我去了这篇文章但不理解数组相关部分: 函数指针和函数地址
int a[20];
a您正在声明一个可以容纳20int的数组
int *b=a;
由于a是一个数组,a因此计算为数组的基地址a(即 的第一个元素a)。指向数组中第一个元素b的指针也是如此inta
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