#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int(*p)[10] = &arr;
int i = 0;
printf("%p\n", p);
printf("%p\n", *p);
printf("%d\n", *(*p));
return 0;
}
调试的时候发现p和*p的值是一样的,都等于&arr,这两个有什么区别吗?
以及为什么*p的值不是arr首元素,而*(*p)才是arr首元素?
请教下各位大佬
p是存放了arr[0]~arr[9]的地址吗?
而*p是指出arr[0]的地址,*(*p)是指出arr[0]?
p
是指向数组的指针。*p
是数组。数组类型对象再使用的时候大部分时候会被自动转化为指向数组第一个元素的指针。数组和数组的第一元素再内存中是在同一个地址开始的。所以地址是一样的。(你可以试一下
p+1
与(*p)+1
,看看有什么不同)上面说了,
p
指向的数组,*p
是数组。它会自动转换为指向数组首元素的指针,于是*(*p)
就是首元素。p
只存放了arr
的地址