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的值吗?可为啥打印出来的是后面的字符呢? 展开
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的值吗?可为啥打印出来的是后面的字符呢? 展开
2个回答
展开全部
首先你要理解指针数组,顾名思义,本质是数组,数组的每个成员的类型都是指针。
如问题所述 char* 类型的数组s[2], S表示的是数组的地址,*S表示取S数组的第一个成员。注意重点在这:他的每个成员都是char *(指针)类型的,所以取到的是h的地址,地址加一,向后偏移一位,因为前面的赋值:char[1]的值为字符串"hello"的地址,所以结果为"ello"。
友情提示:新人一定要理解清楚概念,再实践。
更多追问追答
追问
您好!请问[*S表示取S数组的第一个成员] .这里表示的第一个成员的值还是地址啊?
追答
取的是第一个成员的值,也就是“hello”的地址;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这样看:
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
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'
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询