gpt4 book ai didi

c - 数组名称为指针,数组名称带有 & 运算符

转载 作者:行者123 更新时间:2023-11-30 17:51:58 25 4
gpt4 key购买 nike

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

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

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

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

我看了这篇文章,但不明白数组相关部分: Function pointers and address of a function

最佳答案

int a[20];

您正在声明一个数组a可容纳20整数

int *b=a;

a是一个数组,a计算结果为数组的基地址 a (即 a 的第一个元素)。所以bint指向数组中第一个元素的指针 a

int *c=&a;

&a表示 a 的地址被分配给int指针c 。但是,这并不像 &a 那样好。是数组的地址(不是数组的基地址),所以你应该定义 cint ** (即指向指针的指针)或将其分配给 &a[0] (即数组第一个元素的地址 a )。由于数组被分配了连续的内存,一旦你有了数组的基地址,你就可以通过*(b+i)轻松访问数组的其余元素。哪里i是您要访问的元素的索引。

但是,

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

关于c - 数组名称为指针,数组名称带有 & 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16410677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com