C语言指针与数组问题,不明白。

这个是计算字符串长度程序。main(){chars[20];char*p;scanf("%s",s);p=s;while(*p!='\0')p++;printf("The... 这个是计算字符串长度程序。
main()
{
char s[20];
char *p;
scanf("%s",s);
p=s;
while(*p!='\0') p++;
printf("The string length is %d\n",p-s);
}
疑问:p=s;s[20]定义为数组变量,但一个s是什么意思?s赋值给p。*p才是指针变量啊,为什么只写个p上去?p依我理解没有定义吧?请老前辈们指点指点!
展开
 我来答
百度网友35788a8fb
2006-05-22 · TA获得超过1583个赞
知道小有建树答主
回答量:820
采纳率:0%
帮助的人:0
展开全部
*p=s是把str字符串的首地址传给指针p
while(*p)p++;是在p地址存放的字符在有效时指针指向下一个地址
例如,s=welcome....中
w的地址为000000 e的地址为000001(假设字符只占一个地址)
刚开始p=000000,p++之后p=000001....,当p=最后一个字符地址之后,p地址存放的字符就不是正常值了,此时while(*p)正好判断跳出循环,
p-s:此时的p是字符串"welcome..."的最后一个地址, 而str是第一个地址,相减就是该字符串所用的长度

参考资料: http://zhidao.baidu.com/question/7192640.html

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Jonas_July
2006-05-22 · TA获得超过639个赞
知道答主
回答量:136
采纳率:0%
帮助的人:187万
展开全部
当一个数组名出现在一个表达式中时,它会被转换为一个指向该数组第一个元素的指针。这里p=s;s就代表s[20]这个数组的第一个元素的地址。
还有就是s[i],其实就是代表*(s+i);这样理解的话,s[i]中的s也是代表数组第一个元素的地址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
纵横线智能化
2006-05-22 · TA获得超过1858个赞
知道大有可为答主
回答量:3615
采纳率:0%
帮助的人:1359万
展开全部
这个简单啊
S是数组,P就是指向S首地址的指针
这时就代表S了
不懂就多去看看书了
我看书至少10次才弄懂了这个意思
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
学道的些谎言729
2006-05-22 · TA获得超过111个赞
知道答主
回答量:56
采纳率:0%
帮助的人:48万
展开全部
在c中
数组名代表这个数组的首地址
s就代表s[20]的首地址

你可以这样式一下.printf("%c",*s) 就会输出s[0]
printf("%c",*(s+1)) 就会输出s[0]

p是一个内存地址 而*p是p指向的内存地址里面存的数值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式