C语言自动转换问题

voidmain(){charch='A';printf("%d",sizeof('A'));printf("\n%d",sizeof(ch));getchar();}为... void main(){
char ch='A';
printf("%d",sizeof('A'));
printf("\n%d",sizeof(ch));
getchar();
}

为什么第一个是4 想不通啊
展开
 我来答
kaixingui2012
2015-03-24 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6206万
展开全部

'A' 是一个字符常量,但不同的编译器对其解释是不同的,以下内容摘自网络,可自行测试验证一下:

In C :
#include <stdio.h>
int main(){
char a = 'a';
printf("Size of char : %d\n",sizeof(a));
printf("Size of char : %d\n",sizeof('a'));
return 0;
}
Output :
Size of char : 1
Size of char : 4
In C++ :
#include <iostream>
int main(){
char a = 'a';
std::cout<<"Size of char : "<<sizeof(a)<<"\n";
std::cout<<"Size of char : "<<sizeof('a')<<"\n";
return 0;
}
Output :
Size of char : 1
Size of char : 1
为什么sizeof('a')返回的值在C与C++中是不同的?

C99标准的规定,'a'叫做整型字符常量(integer character constant),被看成是int型,所以在32位机器上占4字节。 
ISO C++标准规定,'a'叫做字符字面量(character literal),被看成是char型,所以占1字节。

C99:
An integer character constant is a sequence of one or more multibyte characters enclosed
in single-quotes, as in 'x'. An integer character constant has type int.

C++2003:
A character literal is one or more characters enclosed in single quotes, as in ’x’, optionally preceded by the letter L, as in L’x’.A character literal that does not begin with L is an ordinary character literal, also referred to as a narrow-character literal. An ordinary character literal that contains a single c-char has type char, with value equal to the numerical value of the encoding of the c-char in the execution character set. An ordinary character literal that contains more than one c-char is a multicharacter literal. A multicharacter literal has type int and implementation-defined value.
追问
那char ch='A';在存储的时候存储的是ASCII码吗    如果是  那不也是4个字节
百度网友e571edf
推荐于2016-06-08 · 超过32用户采纳过TA的回答
知道答主
回答量:78
采纳率:50%
帮助的人:61.8万
展开全部
'A'的型别是int.因此sizeof'A'为4。
强制类型转换即可为1:sizeof((char)'A')为1
更多追问追答
追问
那char ch='A';在存储的时候存储的是ASCII码吗    如果是  那不也是4个字节
追答
存储的时候已经转换成char类型了,char ch='A' 相当于char ch=65,你可以试试。ASCII码是char类型的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yucwei
2015-03-24 · 超过24用户采纳过TA的回答
知道答主
回答量:76
采纳率:0%
帮助的人:51.9万
展开全部
英文字母都是占四位,中文字符占8位。
追问
那char ch='A';在存储的时候存储的是ASCII码吗    如果是  那不也是4个字节
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式