小编典典

数组名是指针吗?

all

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


阅读 79

收藏
2022-05-26

共1个答案

小编典典

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

这是一个数组:

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).

为此,要使用普通数组,例如 our ,必须首先将in 中a的名称转换为指针(指向 中的第一个元素)。然后我们向前迈进 3
个元素,并取走那里的任何东西。换句话说:取数组中位置 3 的元素。(这是数组中的第四个元素,因为第一个元素编号为 0。)a``a[3]``a

因此,总而言之,C
程序中的数组名(在大多数情况下)被转换为指针。一个例外是当我们sizeof在数组上使用运算符时。如果a在这种情况下转换为指针,sizeof a将给出指针的大小而不是实际数组的大小,这将是无用的,所以在这种情况下a意味着数组本身。

2022-05-26