黑马程序员技术交流社区
标题:
二级指针问题
[打印本页]
作者:
第一梦
时间:
2015-8-13 22:13
标题:
二级指针问题
struct Person{
char *name;
int age;
};
struct Person per={"haha",2};
struct Person *p=&per;
char **pc=&(per.name); //per.name的地址是存在pc,还是*pc,还是**pc?
printf("%p\n",pc); //pc表示什么意思,里面存的是什么?是地址还是值?
printf("%s\n",*pc); //*pc表示什么意思,里面存的是什么?是地址还是值?
printf("%c\n",**pc); //**pc表示什么意思,里面存的是什么?是地址还是值?
printf("%d\n",*((int*)(pc+1))); //这个地方为什么要加一个(int*)
复制代码
各位坛友,请抽出几分钟时间,给我解释一下上面的代码,回答一下代码后面注释里的问题,小妹在这里多谢你们了!!!
作者:
woxingwosu
时间:
2015-8-13 23:52
我来试着解释一下吧:
printf("%p\n",pc); 输出的是地址,是二维指针pc所指向的地址。也就是应该是一个一维指针变量自己的地址。
printf("%s\n",*pc); 输出的是字符串haha,因为指针p指向的是字符串haha的首地址,输出的就是haha。
printf("%c\n",**pc);输出的是字母h,它相当于是输出了pc[0][0]的值。
printf("%d\n",*((int*)(pc+1))); 我也还没有学struct这里,但是int应该是因为pc定义的char,要输出数字,所以要定义一个int类型。
写的有错误的话,再探讨。
作者:
庐山烟雨浙江潮
时间:
2015-8-14 00:19
1)char **pc=&(per.name); per.name的地址存在了二级指针pc里面, pc是一个指向指针的指针,per.name本身就是一个char *类型的变量,所以得有一个char **的指针来存储char *变量的地址。所以per.name的地址存在了二级指针pc里面
2)printf("%p\n",pc); 输出的是pc的地址,pc表示一个指向char *类型的变量的指针,pc内存里存的是per.name的地址
3) printf("%s\n",*pc); *pc是根据pc中存储的地址找到相应的内存,输出该内存中的值。
4) printf("%c\n",**pc); 输出per.name的第一个字符,根据上面那句话,*pc就是per.name,**pc就是*per.name,*name就是找到首地址的内存
作者:
lucky24
时间:
2015-8-14 09:43
楼下解答的不错
作者:
yushimin763
时间:
2015-8-14 10:07
本帖最后由 yushimin763 于 2015-8-14 11:06 编辑
pc指向的是per.name的地址,*pc指向的是存放per.name的地址的值,**pc指的是取*pc指向的地址的值所以第一行输出的是per.name的地址
第二行输出的是pc指向的per.name的首地址(由于是字符串看作字符数组)由于输出以%s输出字符串所以输出“haha”
第三行相当于输出per.name的首地址的值,所以为‘h’
第四行相当于per.name的首地址+1,指向了per中age的地址所以要强转成int类型输出
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2