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依我理解没有定义吧?请老前辈们指点指点! 展开
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依我理解没有定义吧?请老前辈们指点指点! 展开
展开全部
*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是第一个地址,相减就是该字符串所用的长度
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当一个数组名出现在一个表达式中时,它会被转换为一个指向该数组第一个元素的指针。这里p=s;s就代表s[20]这个数组的第一个元素的地址。
还有就是s[i],其实就是代表*(s+i);这样理解的话,s[i]中的s也是代表数组第一个元素的地址。
还有就是s[i],其实就是代表*(s+i);这样理解的话,s[i]中的s也是代表数组第一个元素的地址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个简单啊
S是数组,P就是指向S首地址的指针
这时就代表S了
不懂就多去看看书了
我看书至少10次才弄懂了这个意思
S是数组,P就是指向S首地址的指针
这时就代表S了
不懂就多去看看书了
我看书至少10次才弄懂了这个意思
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在c中
数组名代表这个数组的首地址
s就代表s[20]的首地址
你可以这样式一下.printf("%c",*s) 就会输出s[0]
printf("%c",*(s+1)) 就会输出s[0]
p是一个内存地址 而*p是p指向的内存地址里面存的数值
数组名代表这个数组的首地址
s就代表s[20]的首地址
你可以这样式一下.printf("%c",*s) 就会输出s[0]
printf("%c",*(s+1)) 就会输出s[0]
p是一个内存地址 而*p是p指向的内存地址里面存的数值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询