C语言设计第五版——谭浩强279页关于二级指针的代码。
请问为什么
*p
以整数输出就是name[2]的值(即地址),而以字符串输出就是name[2]的值所指向字符串的内容?
int main()
{
char *name[] = {"Follow Me", "BASIC", "GreatWall", "FORTRAN", "Computer design"};
char **p;
p = name + 2;
printf("%d\n", *p);
printf("%s\n", *p);
return 0;
}
运行结果:
4210704
GreatWall
一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针。指针变量也是一种变量,也会占用存储空间,也可以使用&获取它的地址。C语言不限制指针的级数,每增加一级指针,在定义指针变量时就得增加一个星号*。p1 是一级指针,指向普通类型的数据,定义时有一个 *;p2 是二级指针,指向一级指针 p1,定义时有两个 *。
以整数输出就是name[2]的值(即地址),而以字符串输出就是name[2]的值所指向字符串的内容?
为什么?因为p是字符类型指针,指向的是一个字符数组里的内容,所以你%s格式说明为字符串,就输出字符串,为其内容,%d格式说明为整数,因为指针变量存的就是地址(此处为二级指针,也是指针),所以地址。
希望对题主有所帮助,望采纳!!
name 是指针数组的首地址,name+2相当于 name[2]
p =name+2;*p相当于取name[2]的值,name[2]的值char指针,也就是字符串“GreatWall”的首地址,所以
printf("%d\n", *p);显示的是“GreatWall”这个字符串的地址
printf("%s\n", *p);显示的是“GreatWall”这个字符串
,* p是一个指针,值为指针指向内容的地址
打印%d会打印* p的值,
以字符串输出的话,输出时会往后面扫描,遇到结束符才会停止输出,改为"Gr\0eatWall",后,就只会输出Gr
我们公司的C/C++大牛们,积累经验都是靠:看标准手册、看github上优秀的开源库、还有业余开发项目写大量代码练手,反正就从没看过这种可能被误导的教科书来学习的
你可以看看网上怎么评论的 https://www.zhihu.com/question/344112658
建议多看标准手册 https://zh.cppreference.com/