C 中数组的名称是指针吗?
如果不是,数组名称和指针变量有什么区别?
数组是数组,指针是指针,但大多数情况下数组名称是转换的到指针。经常使用的一个术语是它们decay到指针。
这是一个数组:
int a[7];
a
包含七个整数的空间,您可以通过赋值将值放入其中之一,如下所示:
a[3] = 9;
这是一个指针:
int *p;
p
不包含任何整数空格,但它可以指向整数空格。例如,我们可以将其设置为指向数组中的某个位置a
,比如第一个:
p = &a[0];
令人困惑的是你也可以这样写:
p = a;
这确实not复制数组的内容a
进入指针p
(无论这意味着什么)。相反,数组名称a
转换为指向其第一个元素的指针。因此该作业与前一个作业的作用相同。
现在你可以使用p
与数组类似:
p[3] = 17;
这样做的原因是 C 中的数组解引用运算符,[ ]
,是根据指针定义的。x[y]
意思是:从指针开始x
, step y
元素在指针指向的内容之后向前移动,然后取那里的任何内容。使用指针算术语法,x[y]
也可以写成*(x+y)
.
为了使其能够与普通数组一起使用,例如我们的a
, 名字a
in a[3]
必须首先转换为指针(指向a
)。然后我们向前推进 3 个元素,并采取其中的任何内容。换句话说:取出数组中位置 3 的元素。 (这是数组中的第四个元素,因为第一个元素的编号为 0。)
因此,总而言之,C 程序中的数组名称(在大多数情况下)会转换为指针。一个例外是当我们使用sizeof
数组上的运算符。如果a
在这种情况下被转换为指针,sizeof a
会给出指针的大小而不是实际数组的大小,这将毫无用处,所以在这种情况下a
表示数组本身。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)