#include <stdio.h>
int main(int argc, char *argv[])
{
//定义四个变量
int a=101,b=202,c=303,d=404;
//把四个变量的地址保存到一个数组里面
int *array[4];
array[0]=&a;
array[1]=&b;
array[2]=&c;
array[3]=&d;
//以下打印的是四个变量的值和他们的地址
printf("a=%d, &a=%p\n",a,&a);
printf("b=%d, &b=%p\n",b,&b);
printf("c=%d, &c=%p\n",c,&c);
printf("d=%d, &d=%p\n",d,&d);
printf("array=%p\n",array);
printf("array[0]=%p,array[1]=%p,array[2]=%p,array[3]=%p\n",array[0],array[1],array[2],array[3]);
int **p;
p=array;
printf("p=%p\n",p);
printf("*p=%p\n",*p);
printf("*(p+1)=%p\n",*(p+1));
printf("*(p+2)=%p\n",*(p+2));
printf("*(p+3)=%p\n",*(p+3));
printf("**p=%d\n",**p);
printf("**(p+1)=%d\n",**(p+1));
printf("**(p+2)=%d\n",**(p+2));
printf("**(p+3)=%d\n",**(p+3));
return 0;
}
*******************************************
这个例子让我明白,如果int **p;的话,*p和p必然是地址,类似0x123123,**p那必然是整形数。
再举个例子,p=0x12312,&p是p这个存储着地址的变量的地址,*p是指0x12312所指的地址所储存的值。
就是要搞明白四个值的意思:
p,&p,*p,**p以及能够成为*的前提是p里面存的值。