这是下面的代码
#include<stdio.h>
int main()
{
int arr[5] = {1,2,3,4,5};
int (*ptr)[5] = &arr;
printf("address of ptr = %p\nadress of *ptr = %p\n", ptr, *ptr);
return 0;
}
编译后,“ptr 的地址”和“*ptr 的地址”的输出结果是相同的。输出 :
address of ptr = 0x7fc20edcc0
adress of *ptr = 0x7fc20edcc0
这是否意味着 ptr 在某种程度上或确切地说是指向指针的指针?如果是,那么 ptr 和 *ptr 的地址如何相同。
如果这是不同的东西,请解释一下。
此外,我们将“&arr”保存在指向数组的指针中,这意味着数组 arr 的第一个元素的地址,如果这是正确的,那么 ptr & *ptr 也应该指向某个不同的位置。
还是像这样的东西,虽然ptr和*ptr指向同一个地址,但是以某种不同的方式,所以ptr指向整个数组,本质上是在地址的帮助下指向整个数组数组的第一个元素。
尽管
*ptr 是指向数组元素的普通指针。