sizeof运算符、size_t和typedef声明

一、sizeof运算符

C语言中将表示字符的char型长度定义为1。

通过是用sizeof运算符(sizeof operator),写作sizeof(数据类型名称)可以判断出包括char型在内的所有数据类型的长度。

 

该运算符不仅仅是上面这种形式,还可以像这样使用:sizeof (表达式)

要判断数据类型的长度时使用前者,要判断变量或表达式的长度时使用后者。

 

#include <stdio.h>

int main(int argc, char *argv[])
{
	int a,b;
	char x,y;

	printf("sizeof(int) = %d\n", sizeof(int));
	printf("sizeof(char) = %d\n", sizeof(char));

	printf("sizeof(a) = %d\n", sizeof(a));
	printf("sizeof(x) = %d\n", sizeof(x));

	printf("sizeof(a + b) = %d\n", sizeof(a + b));
	printf("sizeof(x + y) = %d\n", sizeof(x + y));
	printf("sizeof(a + x) = %d\n", sizeof(a + x));

	return 0;
}

 

sizeof亦可求数组长度以及数组元素个数

#include <stdio.h>

int main(int argc, char *argv[])
{
	int str[5];

	printf("sizeof(str) = %d\n", sizeof(str));
	printf("sizeof(str) / sizeof(str[0]) = %d\n", sizeof(str) / sizeof(str[0]));

	return 0;
}

 

 

二、sizeof_t和typedef声明

由sizeof运算符生成的值的数据类型是在<stddef.h>头文件中定义的size_t型,在许多编译器中用typedef声明来定义size_t型。

typedef unsigned size_t;

typedef声明是数据类型的同义词,也就是为现有的数据类型创建别名(并非创建新的数据类型)。

通过这个声明,size_t就成了unsigned型的同义词。

这个同义词在语法上可以作为一种“数据类型名称”来使用。

sizeof运算符是不会生成负值的,所以将它定义为无符号整型。

 

printf函数中的“%lu”转换说明表示unsigned long型数值,“%u”转换说明则是表示unsigned型数值。

格式控制字符串中的转换说明必须和要显示的值的数据类型保持一致。