示例
#include <stdio.h>
int main(void)
{
//最初K&R给出的关键字
int int_size = sizeof(int);
int short_size = sizeof(short);
int long_size = sizeof(long);
int unsigned_size = sizeof(unsigned);
int char_size = sizeof(char);
int float_size = sizeof(float);
int double_size = sizeof(double);
//C90标准添加的关键字
int signed_size = sizeof(signed);
//void
//C99标准添加的关键字
int bool_size = sizeof(_Bool);//布尔值
//int complex_size = sizeof(_Complex);//复数
//int imaginary_size = sizeof(_Imaginary);//虚数
//long、short、unsigned、signed用来修饰int
signed short int ss_int = 0;
unsigned short int us_int = 0;
signed long int sl_int = 0;
unsigned long int ul_int = 0;
long long int ll_int = 0;
long double ld_int = 0;
//......
//打印每种数据类型所占字节数
printf("--------sizeof------\n");
printf("sizeof(int) \t %d \n", int_size);
printf("sizeof(short) \t %d \n", short_size);
printf("sizeof(long) \t %d \n", long_size);
printf("sizeof(unsigned) \t %d \n", unsigned_size);
printf("sizeof(char) \t %d \n", char_size);
printf("sizeof(float) \t %d \n", float_size);
printf("sizeof(double) \t %d \n", double_size);
printf("sizeof(signed) \t %d \n", signed_size);
printf("sizeof(_Bool) \t %d \n", bool_size);
char ch = 'A';
//类型必须写在括号里
printf("%u", sizeof(char));
//变量可以不写在括号里
printf("%u", sizeof ch);
printf("%u", sizeof(ch));
getchar();
}
运行测试
注意 类型可移植性
sizeof运算符以字节为单位返回类型或值的大小。这应该是某形式的整数,但是标准只规定了该值是无符号整数。在不同的实现中,它可以是unsigned int、unsigned long甚至是unsigned long long。因此,如果要用printf()函数显示sizeof表达式,根据不同系统,可能使用%u、%lu或%llu。这意味着要查找你当前系统的用法,如果把程序移植到不同的系统还要进行修改。鉴于此,C提供了可移植性更好的类型。首先,stddef.h头文件(在包含stdio.h头文件时已包含其中)把size_t定义成系统使用sizeof返回的类型,这被称为底层类型(underlying type)。其次,printf()使用z修饰符表示打印相应的类型。同样,C还定义了ptrdiff_t类型和t修饰符来表示系统使用的两个地址差值的底层有符号整数类型。