您的位置:首页 > 其它

int类型以及指针的类型所占字节的大小,到底是由什么决定的?

2007-11-07 16:41 495 查看
int类型的大小仅仅是由机器的字长决定的,还是与机器的字长以及编译器都有关?
sizeof(int)=??

指针的类型是由什么决定的呢?
sizeof(Type *)=??

我提出这个问题的缘由是:
林锐的高质量C++/C编程指南中有这样的题目:
二、以下为Windows NT下的32位C++程序,请计算sizeof的值(10分)
char *p = str ;
int n = 10;
请计算
sizeof ( p ) = 4 (2分)

sizeof ( n ) = 4 (2分)

#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>

int main(void)
{
int i;
char *string;
printf("i %d/n",sizeof(i));
printf("int %d/n",sizeof(int));
printf("char %d/n",sizeof(char));
printf("string %d/n",sizeof(string));
system("pause");
i=10;
string="hahaha";
printf("i=10 %d/n",sizeof(i));
printf("string=hahaha %d/n",sizeof(string));
system("pause");
return 0;
}

i 4
int 4
char 1
string 4
请按任意键继续. . .
i=10 4
string=hahaha 4
请按任意键继续. . .

一般情况下,微机上的 C/C++ 编译器都是以机器字的长度作为整型和指针的长度的,很少有例外,这样你满意了吗?

在一些大型机上,可能会有所不同。

(1)int类型的长度??
……准确的字节数依赖于机器和编译器……
现阶段32bit(即4字节)PC一般在绝大多数编译器下是32bit,当然也有的编译器是16bit(比如turbo C)。最关键一点,只能小,不能大,这是因为即使编译器把它当作大于32bit了,但因为CPU字长只有32bit,所以也只能处理32bit的数。
同时需要注意的就是 在c标准中只是对不同的数据类型的数字范围设置了下界,但是没有上界。

(2)指针的类型是由什么决定的呢?
sizeof(Type *)=??
==================
指针的大小是由内存寻址空间决定的,即地址总线决定。

一般32位机寻址空间4G,所以指针占4字节;

一般8位的单片机寻址空间是64k,所以指针占2字节。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: