理解数组地址和转换后的指针的等价
在 C 编程语言中,将数组转换为使用数组到指针转换指向其第一个元素的指针。这就提出了一个问题,为什么数组的地址与转换后的指针的地址相同。
为了说明这个概念,让我们考虑以下代码:
int t[10]; int *u = t; cout << t << " " << &t << endl; cout << u << " " << &u << endl;
输出此代码演示了数组地址和转换后的指针地址的等效性:
0045FB88 0045FB88 0045FB88 0045FB7C
要理解这种现象,我们需要认识到与符号 t:
在我们的代码中,输出的第一行显示 t (数组)的地址和 &t (指向数组的指针)。由于数组是连续的内存块,因此它们的起始地址是相同的。
输出的第二行显示了 u (转换后的指向第一个元素的指针)的地址和 &u (转换后的指向第一个元素的指针)的地址指针)。同样,这些地址是相同的,因为 u 本质上相当于 &t[0]。
因此,我们得出结论,数组的地址与转换为指针的数组的地址相同的原因是因为两者都代表数组占用的连续内存块的起始地址。这种等价性之所以成立,是因为数组到指针的转换会生成一个指向数组第一个元素的指针,该元素与整个数组的开头具有相同的内存位置。
以上是为什么 C 中数组的地址等于指向其第一个元素的指针的地址?的详细内容。更多信息请关注PHP中文网其他相关文章!