指向指针的指针
#include<stdio.h>
int main(){
int num=123; //|num|123|
int *p=# //|p|&num|
//|*p|num|123|
int **pp=&p; //|pp|&p|
//|*pp|p|&num|
// |**pp|*p|num|123|
return 0;
}
实例如下:
#include<stdio.h>
int main(){
int num=123;
int *p1=#
int **p2=&p1;
printf("&num=%p\n",&num);
printf("num=%d\n",num);
printf("p1=%p\n",p1);
printf("&p1=%p\n",&p1);
printf("*p1=%d\n",*p1);
printf("p2=%p\n",p2);
printf("*p2=%p\n",*p2);
printf("**p2=%d\n",**p2);
return 0;
}
结果:
&num=0x7ffc4e94fb44
num=123
p1=0x7ffc4e94fb44
&p1=0x7ffc4e94fb38
*p1=123
p2=0x7ffc4e94fb38
*p2=0x7ffc4e94fb44
**p2=123
结论:
由结果可知p1存放的是num的地址,*p1时解引用,取该地址存放的值
而&p1时取指针p1的地址
对于**p2来说,
p2存放的是p1的地址,
*p2是对p2解引用,取p1地址存放的内容(即num的地址)
**p2是对*p2解引用,取num地址内存放的值
指针数组和指向指针的指针
#include<stdio.h>
int main(){
char *p[]={
"我是你的LFQ",
"我的HDE",
"你的LFQ是我",
"huang lao ba zi"
};
int i;
char **p2;
char **p3[4];
p2=&p[3];
p3[0]=&p[0];
p3[1]=&p[1];
p3[2]=&p[2];
p3[3]=&p[3];
printf("his name is %s\n",*p2);
printf("\n");
printf("the sentences i want to say :\n");
for(i=0;i<4;i++){
printf("%s\n",*p3[i]);
}
printf("\n");
printf("the content of shuzuzhizhen :\n");
for(i=0;i<4;i++){
printf("%s\n",p[i]);
}
return 0;
}
结果:
his name is huang lao ba zi
the sentences i want to say :
我是你的LFQ
我的HDE
你的LFQ是我
huang lao ba zi
the content of shuzuzhizhen :
我是你的LFQ
我的HDE
你的LFQ是我
huang lao ba zi