c语言中SIZEOF的问题

来源:百度知道 编辑:UC知道 时间:2024/05/09 05:23:25
char a=1
printf("%d\n",sizeof('a'));

这个程序输出为什么是2啊?书上说整型是2或4字节,到底是几个字节?
是说16位的机器就是2个,32位是4个吗?那我电脑是32位杂的还是2啊?跟编译器有关么??

楼上不要胡说!

>>是说16位的机器就是2个,32位是4个吗?
这句话说的不太对,
这个其实指的是编译器的位数,
对于16位编译器(例如,TC),int型占2个字节
对于32位编译器(例如,VC,GCC),int型占4个字节

这里指的是编译器的位数,不是CPU的位数

分整型和长整型
整型为2 长整型为4
是哪种要看开始的main中怎样定义
不是跟编辑器有关的
如果没有特殊的标注 例如long***
一般默认为整型 输出为2

请注意以下几点:
1 字符常量,例如'a',在C语言中是int类型(原因你别管),在C++中是char类型。所以,在C语言中,sizeof('a')等于sizeof(int)

2 int的宽度,由编译器决定。而编译器如何决定呢?这要看当初设计编译器时是如何考虑的。在16位机时代,TC 2出现,TC 2就是要编译出在16位机上运行的应用程序,故决定将int定为16位。即便到今天32位机时代,你用的TC 2也不会变,仍然是将int定为16位。因为你的编译器是定死的。

3 上面的“定死”是相对的,有少数编译器允许用户设置选项。这个你很难遇到,先不管,就当没这回事。

关于编译,有两个概念,一个是宿主机(host),一个是目标机(target)。宿主机是指编译器在哪种机器上进行编译,目标机是指编译生成的代码是准备放到哪种机器上允许。

在32位机上用TC 2进行编译,宿主机为32位,目标机为16位。TC 2编译得到的程序是要能够在16位机上运行的(当然,因为兼容性,16位的程序也能在32位机上运行)。

另外,可参考 http://zhidao.baidu.com/question/86700450.html

楼上所言