指针数组的输出问题,输出为什么是ello

img


char *p[]={"hello","world"}; 语句printf("%s",*p+1)输出为什么是ello

这是因为 *p就是p[0],也就是第0个字符串hello,然后加1,就相当于从字符串第1个字符,也就是e开始输出字符串,自然是ello了
如果输出world,应该是 * (p+1),因为 * 优先级高于+

这是一个字符串指针数组,其中p[0]指向字符串"hello",p[1]指向字符串"world"。
printf("%s", p + 1)输出的是p+1所指向的字符串,即"hello"+1。因为p是指向"hello"的指针,所以p+1就是指向"ello"的指针。因为%p中%s格式说明符用于输出字符串,所以输出的结果就是"ello"。
因此,printf("%s",*p+1)输出为"ello"。

1.数组本身也是指针
2.p是个指针数组,那么它相当于二维数组,或者二级指针
3.*p等同于p[0],*(p+1)等同于p[1]
4.*p+1等同于p[0]+1,那么字符串的首字母就从p[0][0]变成了p[0][1]

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^