解码数组到指针的转换:为什么数组的地址等于指向第一个元素的指针
在 C 语言中,数组的概念 -到指针的转换可能会导致一个看似奇怪的现象:数组的地址与转换为指针的数组相同。为了阐明这种现象,让我们剖析以下代码片段:
int t[10]; int *u = t; cout << t << " " << &t << endl; cout << u << " " << &u << endl;
输出:
0045FB88 0045FB88 0045FB88 0045FB7C
虽然指针 u 的输出是有意义的,但理解t、&t 和 &t[0] 的等价性可能看起来令人费解。深入研究数组到指针转换的复杂性可以揭示这种行为。
数组到指针转换
在表达式中单独使用 t 时,会发生从数组类型到指针类型的自动转换,产生指向数组第一个元素的指针。此转换允许将数组视为指针。
获取变量的地址
当 & 运算符与 t 一起使用时,没有隐式数组到指针发生转换。相反,& 运算符显式导出 t 本身的地址,从而产生指向整个数组的指针。
位置等价
数组的第一个元素占据与整个数组的开头相同的内存位置。这种位置等价解释了为什么 t(数组)、&t(指向数组的指针)和 &t[0](指向第一个元素的指针)的地址都具有相同的值。
本质上,数组到指针的转换提供了一种通过指针访问各个数组元素的方法,而 &t 则授予对作为单个实体的数组的访问权限。将数组表示为连续块和各个元素的聚合的这种二元性是在 C 代码中有效利用数组的基础。
以上是为什么 C 中数组的地址等于指向其第一个元素的指针?的详细内容。更多信息请关注PHP中文网其他相关文章!