C语言的基础类型的内存空间

学习C语言的时候,对C语言的基础类型所占用的内存空间是非常模糊的。查阅资料,才知道C语言的基础类型占用的内存空间与编译器位长有关,常见是16位、32位、64位。维西目前用的是32位、64位编译器,而16位的数据是查阅资料得来的,问号是尚未查阅到,欢迎纠错、补充。

int,long int,short int的宽度都可能随编译器而异。但有几条铁规(ANSI/ISO制订的):

1、sizeof(short int)<=sizeof(int)

2、sizeof(int)<=sizeof(long int)

3、short int至少应为16位(2字节)

4、long int至少应为32位(4字节)

图1  基础类型占用的内存空间

按表格总结:

1)字符类型char占1个字节。

2)浮点型基本类型float、double分别占4个字节和8个字节。

3)short int等短最短(最短指在整型里最短字节数是2),占2个字节。long long等长最长(最长指在整型里最长字节数是8),占8个字节。

4)无符号修饰的基础类型所占空间大小不变,如int和usigned int。

5)指针类型对应编译器位长。

测试代码如下:

/**************************************************************************
 * 文件名:size.c
 *
 * 作者:维西多莉
 *
 * 功能:查看C语言在32位编译器环境下的基础类型占用的内存空间大小
 *
 * 日期:2018/8/29
 * 
 **************************************************************************/
#include <stdio.h>
#include <stdlib.h>

int main()
{
	char *c;
	int *i;
	double *d;
	long long *ll;
	printf("64位系统\n\r");
	printf("char 占内存:%d个字节\n\r", sizeof(char));
	printf("float 占内存:%d个字节\n\r", sizeof(float));
	printf("double 占内存:%d个字节\n\r", sizeof(double));
	printf("int 占内存:%d个字节\n\r", sizeof(int));
	printf("unsigned int 占内存:%d个字节\n\r", sizeof(unsigned int));
	printf("short int 占内存:%d个字节\n\r", sizeof(short int));
	printf("long int 占内存:%d个字节\n\r", sizeof(long));
	printf("unsigned long 占内存:%d个字节\n\r", sizeof(unsigned long));
	printf("long double 占内存:%d个字节\n\r", sizeof(long double));
	printf("long long 占内存:%d个字节\n\r", sizeof(long long));
	printf("int 占内存:%d个字节\n\r", sizeof(int));

	printf("------------------分割线----------------\n\r");

	printf("char * 占内存:%d个字节\n\r", sizeof(c));
	printf("double * 占内存:%d个字节\n\r", sizeof(d));
	printf("int * 占内存:%d个字节\n\r", sizeof(i));
	printf("long long * 占内存:%d个字节\n\r", sizeof(ll));
	system("pause");
	return 0;
}

32位结果图如图2所示。

图2  32位编译器内存结果图

64位结果图如图3所示。

图3  64位编译器内存结果图

猜你喜欢

转载自blog.csdn.net/sinat_41876579/article/details/82189421