既然*p是指向了数组的地址,打印为什么需要*(*p)呢?为什么*(*p)==(*p)[i]
(p)[i]可以理解,*(p)我不理解
#include <stdio.h>
#include <stdio.h>
int main()
{
int temp[5] = {1, 2, 3, 4, 5};
int (*p)[5] = &temp;
int i;
for(i = 0; i < 5; i++)
{
printf("%d\n", *(*p + i));
//或者 printf("%d\n", (*p)[i]);
}
return 0;
}
望各位解答
*(*p)就是取地址里面的内容
int *p[5],首先它是一个数组,它的大小是5,它里面存放的数据类型是int *,也就是整型指针。 所以它叫指针数组、 (从右向左解析这个表示)
int (*p)[5],首先p是一个指针,指向大小为5的数组,因此这叫数组指针。(括号优先)
而 *p是指向了数组的首地址,所以 *p就是第一个元素temp[0]的地址,为&temp[0]或者temp ,再因为数组是连续的空间, *p+1就是&temp[1],而 *(*p+1)就是取地址里面的值
你可以打印 printf("%d\n", (*p + i));出来看看,地址就是依次往后移动一个int的大小,也就是4个字节,int就是占4个字节
同时也可以对比数组和指针的地址
for(i = 0; i < 5; i++)
{
printf("%d\n", &temp[i]);
}
for(i = 0; i < 5; i++)
{
printf("%d\n", (*p + i));
}