| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 529 人关注过本帖
标题:c语言编程指针问题
只看楼主 加入收藏
hdshdzh
Rank: 2
等 级:论坛游民
帖 子: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
曼珠沙华
Rank: 2
来 自:广东
等 级:论坛游民
帖 子:121
专家分:98
注 册:2009-5-21
收藏
得分:1 
str为指针地址,指针在内存中的位置

例如:str指向首个字符,那么str++则指向第二个字符

走过了,却留下了痕迹。伤过了,却是一种无奈。人生只不过是一种擦肩而过的过程。
2010-05-16 09:37
灰色代言
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-16 10:24
qbear
Rank: 2
等 级:论坛游民
帖 子:9
专家分:17
注 册:2010-4-7
收藏
得分: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
Rank: 2
等 级:论坛游民
帖 子:77
专家分:11
注 册:2010-5-13
收藏
得分:0 
输出字符串长度和字符串本身的话,为什么要使str回到字符串开头。理解有点模糊
2010-05-16 11:32
ubuntulover
Rank: 4
等 级:业余侠客
帖 子:77
专家分:256
注 册:2010-4-9
收藏
得分:3 
这东西不难,一步一步跟着走,然后看到加减了数数就看出来了
2010-05-16 12:47
快速回复:c语言编程指针问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.078503 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved