gpt4 book ai didi

c - 数组名是指针吗?

转载 作者:行者123 更新时间:2023-11-30 16:57:28 26 4
gpt4 key购买 nike

数组的名称是 C 中的指针吗?如果不是,数组名称和指针变量有什么区别?

最佳答案

数组是数组,指针是指针,但在大多数情况下,数组名称​​转换为指针。经常使用的术语是它们衰减为指针。

这是一个数组:

int a[7];

a 包含七个整数的空间,您可以通过赋值将值放入其中一个整数中,如下所示:

a[3] = 9;

这是一个指针:

int *p;

p 不包含任何整数空格,但它可以指向整数空格。例如,我们可以将其设置为指向数组a中的一个位置,例如第一个:

p = &a[0];

令人困惑的是,您还可以这样写:

p = a;

不会将数组a的内容复制到指针p中(无论这意味着什么)。相反,数组名称 a 被转换为指向其第一个元素的指针。因此该分配与前一个分配的作用相同。

现在您可以以与数组类似的方式使用p:

p[3] = 17;

此方法有效的原因是 C 中的数组解引用运算符 [ ] 是根据指针定义的。 x[y] 表示:从指针 x 开始,在指针指向的内容之后向前移动 y 个元素,然后取其中的内容。使用指针算术语法,x[y] 也可以写为 *(x+y)

要使其适用于普通数组,例如我们的 a,必须首先转换 a[3] 中的名称 a指向一个指针(指向 a 中的第一个元素)。然后我们向前推进 3 个元素,并采取其中的任何内容。换句话说:取出数组中位置 3 的元素。 (这是数组中的第四个元素,因为第一个元素的编号为 0。)

因此,总而言之,C 程序中的数组名称(在大多数情况下)会转换为指针。一个异常(exception)是当我们在数组上使用 sizeof 运算符时。如果在此上下文中将 a 转换为指针,则 sizeof a 将给出指针的大小,而不是实际数组的大小,这将毫无用处,因此case a 表示数组本身。

关于c - 数组名是指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39507446/

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