#include <stdio.h>
int main(){
int *p,*q[5];
int a[5];
int i;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
p=a;
for(i=0;i<5;i++)
q[i]=&a[i];
for(i=0;i<5;i++)
printf("%d %d %d %d\n",*(p+i),**(q+i),*(q+i),q+i);
return 0;
}
q是一个int型长度为5的指针数组,q中的每个元素存放的是数组a每个元素的地址,q+i相当于&q[i],是这个指针数组下标为i的元素的地址,而*(q+i)则相当于q[i],是指针数组中下标为i的元素内存放的值,也就是a[i]的地址。
q是指针数组头,是地址常量,q+i可以理解为在q地址的基础上偏移i个int 类型的地址,而(q+i)则相当于取这个地址里面存放的值