| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 11750 人关注过本帖, 8 人收藏
标题:[原创]C的关键字——const的理解和用法
只看楼主 加入收藏
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
呵呵,
第一个可能跟编译器有关,这个问题倒是在论坛上讨论过。
至于第二个有什么不对吗?

对不礼貌的女生收钱......
2006-06-03 17:54
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
至于第二个有什么不对吗?
-----------------
第2个问题是指那个转大写那代码吧?
那个和编译器无关的。只是定义了一个临时变量把*String的首地址赋给*Source;
再把*String的每个字符转化为大写,如此而已,只是个人觉得那段代码在实际运用中没啥意义。

我的原则很简单:不做不喜欢的事!
2006-06-03 18:03
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-03 18:16
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

针对您的想法,
让我们做个简单的程序测试:
main()
{
char str[3]="abc";
printf("%s",str);
}
如果您运行这个程序得到的结果是abc的话,那您就是对的,
如果不是,那论坛的资料就是对的,
结果如何,您自己运行下便知.


对不礼貌的女生收钱......
2006-06-03 18:22
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
main()
{
char str[3]="abc";
printf("%s",str);
}
//这是论坛上的资料?我倒没看。

char str[3]="abc"; //对于这个表达式要根据不同的编译器来决定它的结果;
//在DEV-CPP和GCC下只是对字符数组的范围大小提出警告
//运行并没有错误;在VC下是提出错误信息的;
//毕竟,标准并没有对这种情况做明确规定;
//在DEV-CPP和GCC对于字符串长度超过字符数组长度一律
//把字符串后面超出的部分去掉不显示;

我的原则很简单:不做不喜欢的事!
2006-06-03 18:28
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
收藏
得分:0 

main()
{
char str[3]="abc";
str[3]=0;
printf("%s",str);
}


DEV-CPP和GCC没用过,用上面的试试,结果会不会一样


偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-06-03 18:33
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

哎,那倒是.上面那个是我随便写的,论坛上没有。
现在的编译器容错能力太强,
我的理解是,那个是错的!打印的时候应该是乱码.
系统并没有分配一个'\0'给它,但是在打印的时候却连相邻的内存单元也打出来了。所以是乱码


对不礼貌的女生收钱......
2006-06-03 18:35
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
收藏
得分:0 
[QUOTE]系统并没有分配一个'\0'给它[/QUOTE]这是肯定的

偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-06-03 18:37
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
main()
{
char str[3]="abc";
printf("%s",str);
}
汗一个,刚用DEV-CPP运行了上面代码,abc都打印出来了但后面出现了乱码;咋的和我以前打印的类似的代码的结果不一样。。。

我的原则很简单:不做不喜欢的事!
2006-06-03 18:51
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
那是因为您重新编译这个程序的时候,系统重新为字符串str分配了不同地址(确切的说,只能说随机,但很大可能是地址是不同)的内存,
打印出来的结果也有很小很小的可能性会是对的(当相邻的内存存储的刚好为'\0'),
不然则要看相邻的内存存储的是什么,
有可能先abc后面才是乱码,
也有可能是直接全部乱码.
这种程序倒是还好,只是对未知的内存进行引用,并没有改变,
不然楼主您一直运行程序,就很可能导致系统崩溃了,呵呵。

对不礼貌的女生收钱......
2006-06-03 19:01
快速回复:[原创]C的关键字——const的理解和用法
数据加载中...
 
   



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

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