c语言数组指针相关问题,求c大佬指导一下,谢谢!

charstr[]="shanghai",*p;p=str;p++;printf("%c,%c\n",*p,str[4]);结果是h和g我不能理解是p=str,和p++是... char str[]="shanghai",*p ;
p=str;
p++;
printf("%c,%c\n", *p, str[4]) ;
结果是h和g
我不能理解是p=str,和p++是什么意思?如果是把str数组的值给p的话,为什么p还可以++,它的不是已经是数组了吗?如何进行++了?
展开
 我来答
缘来是我LXZ
高粉答主

2019-03-03 · 缘来缘去终会散,花开花败总归尘。
缘来是我LXZ
采纳数:208 获赞数:186967

向TA提问 私信TA
展开全部
  1. p是指针,str是数组str[]的首地址,p=str表示p指向数组str[]的首地址等价于p=str[0];

  2. p++则是p指针指向的地址前进一个字节(因为str是char类型)表示p指向str[]的第二个元素此时p=str[1];

  3. *p表示取p所指地址的变量值,这里p指向str[1],另外与*p对应的输出格式符是%c,故输出str[1]的内容‘h’;(如果输出格式符为s%则会输出p所指地址后面的所有字符即输出“hanghai”)

  4. str[4]就没什么好讲的了,表示字符串第五个字符。。。str[0]='s';str[1]='h';以此类推str[4]='g'

希望我的回答能解决你的疑惑,望采纳

sky深蓝sea
2019-03-03 · TA获得超过261个赞
知道答主
回答量:54
采纳率:75%
帮助的人:16.5万
展开全部
str是一个数组名,这时候str就表示该数组的首元素地址,而p定义的是一个指针类型(用于存储数据的地址),所以p=str是把str的首元素地址给了p(即把's'的地址给了p);str数组中的元素在内存里是顺序相邻存放的,所以p++就是让p指向's'下一个元素的地址,即p此时存放的是'h'的地址;对指针类型元素p再*就是取它所存的地址中的值,所以输出*p得到的是'h'。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式