|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ c语言编程指针问题
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
529
人关注过本帖
标题:
c语言编程指针问题
只看楼主
加入收藏
hdshdzh
等 级:
论坛游民
帖 子:77
专家分:11
注 册:2010-5-13
结帖率:
92.31%
楼主
收藏
已结贴
√
问题点数:10 回复次数:5
c语言编程指针问题
#include<stdio.h>
main()
{
int len=0;
char *str="string";
while(*str++!='\0')
len++;
str=str-len+1;
printf("\nlength=%d,string:%s",len,str);
}谁能帮我分析一下这个程序,str=str-len+1;这是什么意思。为什么没有这个的话下面就运行不出结果。
搜索更多相关主题的帖子:
c语言
指针
2010-05-16 09:21
举报帖子
使用道具
赠送鲜花
曼珠沙华
来 自:广东
等 级:
论坛游民
帖 子:121
专家分:98
注 册:2009-5-21
第
2
楼
收藏
得分:1
str为指针地址,指针在内存中的位置
例如:str指向首个字符,那么str++则指向第二个字符
走过了,却留下了痕迹。伤过了,却是一种无奈。人生只不过是一种擦肩而过的过程。
2010-05-16 09:37
举报帖子
使用道具
赠送鲜花
灰色代言
该用户已被删除
第
3
楼
收藏
得分:0
提示:
作者被禁止或删除 内容自动屏蔽
2010-05-16 10:24
举报帖子
使用道具
赠送鲜花
qbear
等 级:
论坛游民
帖 子:9
专家分:17
注 册:2010-4-7
第
4
楼
收藏
得分:6
你这个程序我运行了一下,输出为“length=6,string:ring”
我觉得你提问的这一句应该改为str=str-(len+1);改后运行结果为“length=6,string:string”
这样就好解释了,指针一开始指向字符串首地址,执行一次循环,str加1,指向字符串中下一个字符,最后一次判断是否执行循环时已经指向‘\0’,这时虽然不执行循环体语句,但是条件中的自加表达式又执行了一次,所以当程序执行到语句“str=str-len+1;”时,str实际已经指向‘\0’的下一个字节的内存地址
如果程序原意是输出字符串长度和字符串本身的话,就要使str回到字符串开头,应改为str=str-(len+1);
最后说一点,这个程序中,指针实际已经指向了字符数组以外的地方,这应该就是传说中的“指针越界”,这样可能会产生不好的结果,我也是个新手,关于指针越界的危害和解决方法,坐等高手解答,谢谢
2010-05-16 10:31
举报帖子
使用道具
赠送鲜花
hdshdzh
等 级:
论坛游民
帖 子:77
专家分:11
注 册:2010-5-13
第
5
楼
收藏
得分:0
输出字符串长度和字符串本身的话,为什么要使str回到字符串开头。理解有点模糊
2010-05-16 11:32
举报帖子
使用道具
赠送鲜花
ubuntulover
等 级:
业余侠客
帖 子:77
专家分:256
注 册:2010-4-9
第
6
楼
收藏
得分:3
这东西不难,一步一步跟着走,然后看到加减了数数就看出来了
2010-05-16 12:47
举报帖子
使用道具
赠送鲜花
6
1/1页
1
快速回复:
c语言编程指针问题
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.078503 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved