C语言中指针数组的问题

#include<stdio.h>intmain(){char*S[2]={"Hello","World"};printf("%s\n",S[0]);printf("%s... # include <stdio.h>
int main(){
char *S[2]={"Hello","World"};

printf("%s\n",S[0]);
printf("%s\n",*S);
printf("%s\n",*S+1);
printf("%s\n",*(S+1));

return 0;
}
*S+1为啥打印出来的是“ello”,*S不是应该取的是值吗?这样不应该是“H”加1的值吗?可为啥打印出来的是后面的字符呢?
展开
 我来答
老子很凉
2017-11-10 · TA获得超过635个赞
知道小有建树答主
回答量:360
采纳率:79%
帮助的人:56.7万
展开全部
  1. 首先你要理解指针数组,顾名思义,本质是数组,数组的每个成员的类型都是指针。

  2. 如问题所述 char* 类型的数组s[2], S表示的是数组的地址,*S表示取S数组的第一个成员。注意重点在这:他的每个成员都是char *(指针)类型的,所以取到的是h的地址,地址加一,向后偏移一位,因为前面的赋值:char[1]的值为字符串"hello"的地址,所以结果为"ello"。

  3. 友情提示:新人一定要理解清楚概念,再实践。

更多追问追答
追问
您好!请问[*S表示取S数组的第一个成员]  .这里表示的第一个成员的值还是地址啊?
追答
取的是第一个成员的值,也就是“hello”的地址;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8fbee656e8
2017-11-10 · TA获得超过1328个赞
知道小有建树答主
回答量:578
采纳率:68%
帮助的人:190万
展开全部
这样看:
0x00 : 0x78,0x99
0x78: 'H' 'e' 'l' 'l' '0' '\0'
0x99: 'W' 'o' 'r' 'l' 'd' '\0'
其中s就是0x00,然后,s[0]就是 (0x00 + 0 = 0x00)取内容,得到的值是0x78,然后打印的就是hello
*s,就是相当于s[0]
*s + 1,因为优先级关系,先执行s[0],就是 0x78,然后加上1 = 0x79,打印就是 ello
*(s+1),根据优先级,先执行 s+1 = 0x00+1 = 0x01,然后取值得到 0x99,打印的就是 world
更多追问追答
追问
请问s[0]和*s[0]有什么区别呢?
追答
s[0] 的值 就是 0x78
*s[0],就是 *(0x78),对0x78的内容取值 ,就是 'H'
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式