为什么 t、&t[0] 和转换为指针的 t 具有相同的地址
数组是连续的内存块包含相同数据类型的元素。声明数组时,编译器会分配一块内存并创建指向该块内每个元素的指针。
情况 1:t 和 &t[0]
当您单独使用 t 时(没有任何下标),它会进行数组到指针的转换,生成一个指向数组第一个元素的指针。此行为相当于使用 &t[0],它显式返回第一个元素的地址。因此,t 和 &t[0] 具有相同的值。
情况 2:&t
但是,当您将 & 运算符应用于 t 时,它不会触发数组到指针的转换。相反,&t 直接获取 t 本身的地址,从而产生指向整个数组的指针。
在内存中,数组的第一个元素和数组的开头位于同一位置。因此,指针 t、&t[0] 和 u(指向 t 的指针)都具有相同的地址。
输出说明:
给定的代码演示了这一点行为:
int t[10]; int * u = t; cout << t << " " << &t << endl; cout << u << " " << &u << endl;
输出:
0045FB88 0045FB88 0045FB88 0045FB7C
输出显示 t、&t[0] 和 u 具有相同的值 (0045FB88),确认它们与指针等效。
以上是为什么 `t`、`&t[0]` 和指向 `t` 的指针具有相同的地址?的详细内容。更多信息请关注PHP中文网其他相关文章!