| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3829 人关注过本帖
标题:很愧对老师这个职业,快帮帮我呀!不胜感谢
只看楼主 加入收藏
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

老K,我没有ANSI C89 和 C99的说明,最好能发个英文版本上来看看

ChenMo关于1,2,4的解释没错


淘宝杜琨
2005-11-11 00:56
ChenMo
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:3
帖 子:481
专家分:10
注 册:2004-4-8
收藏
得分:0 
以下是引用baidu在2005-11-11 0:16:00的发言:
给你一个提示,这个与编译器的标准有关。也就是C89隐含的int规则,而c99没这规则
但是,17楼的结果,我想不明白,所以,这个贴子我一直没回


隐含的 int 规则 —— 我只认为是隐含指定“不指定函数类型的函数”为 int。
那么这原因应该是:char 默认转换为 int 类型处理了,既然有两字节存储能力,那么一个字符常量就可以写两个了 —— 'ab' ?……

[此贴子已经被作者于2005-11-11 7:32:43编辑过]


欢迎加入 MVC 技术讨论群(新群:90093426)
2005-11-11 07:29
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
收藏
得分:0 
'ab'这个在16位编译器中是合法
'abcd'这个在32位编译器中是合法
这个叫多字节字符常量

隐含的 int 规则 不仅用函数类型,也适用变量
如:

foo(a,b)
{......}

原先,我对有三种结果非常疑惑不解,我和你的看法是差不多,但你也无法解释怎么会有三种结果,现在我明白^_^

结果是 2,4的用的都是C标准去编译的
结果是 1 的用的是c++标准去编译的

偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2005-11-11 08:54
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

可是有人用VC得4


淘宝杜琨
2005-11-11 09:18
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
收藏
得分:0 

VC得4,他编译时用的是C89标准,也就是说17楼的在编译时其源文件后缀用的是 .c


偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2005-11-11 09:26
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
收藏
得分:0 
咦,你又。。。

偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2005-11-11 09:28
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

to Knocker

我认为,我已经在"原因2. 任何整数在运算的过程中都将被视为int型!"这一句中说明了隐含int规则了
'a'如果不进行变量赋值char a='a'的话,默认类型int
'ab'和'abcd'分别在16位和32位中是合法的那是因为他们采用的寄存器是16位的和32位的,一旦写入内存还是得按照预先声明的格式 (''为字符char类型) 进行
char a='aa',*p=&a;
printf("%c,%c",*p,*(p+1));
很明显的,*(p+1)的输出不会是a
所以这里的问题不是你所说的多字节字符常量的原因

结果是1的
char a='a';
printf("%d",sizeof a);//因为char本来就规定为8个字节
这个是一定的,不管你的编译器是什么牌子


printf("%d",sizeof 'a');
得2或者4的朋友,我认为这里是由C语言C89标准默认int规则导致的,而在不同的编译器中,int的大小是不同的故得出2或者4
但是我觉得得2的朋友比较多,因为C89的C编译器大多是16位的

但是在c99中废除的默认int规则,也就是说'a'的长度在C99中是必须为1的,从'aa'开始到'aaaa'才被编译器强制转换为int类型所以'a'还是会被认为是char类型,sizeof的结果自然为1


淘宝杜琨
2005-11-11 10:05
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

我靠,我发了34楼的回复后到37楼竟然用了半个小时,服务器一直说他忙~郁闷


淘宝杜琨
2005-11-11 10:07
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
收藏
得分:0 
[QUOTE]printf("%d",sizeof 'a');
得2或者4的朋友,我认为这里是由C语言C89标准默认int规则导致的,而在不同的编译器中,int的大小是不同的故得出2或者4
但是我觉得得2的朋友比较多,因为C89的C编译器大多是16位的[/QUOTE]
我的测试这个是对的
[QUOTE]但是在c99中废除的默认int规则,也就是说'a'的长度在C99中是必须为1的,从'aa'开始到'aaaa'才被编译器强制转换为int类型所以'a'还是会被认为是char类型,sizeof的结果自然为1[/QUOTE]
我用C99得的还是 4
只有用c++得的才是 1

不知别人是否还有其它结果

偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2005-11-11 10:19
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

是吗?把你的C语言标准资料发上来看一看啊~
你C99采用的是什么编译器,我也去看看

目前也只能有1,2,4这三种结果了,不会出现0,3,8吧


淘宝杜琨
2005-11-11 10:21
快速回复:很愧对老师这个职业,快帮帮我呀!不胜感谢
数据加载中...
 
   



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

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