1.以下代码的输出结果是什么
#include<stdio.h>
#include<stdint.h>
int main(int argc,char ** argv)
{
//while(1)
{
printf("char: |%5zd bytes|\n",sizeof(char));
printf("short: |%5zd bytes|\n",sizeof(short));
printf("int: |%5zd bytes|\n",sizeof(int));
printf("long: |%5zd bytes|\n",sizeof(long));
printf("long long: |%5zd bytes|\n",sizeof(long long));
printf("int8_t: |%5zd bytes|\n",sizeof(int8_t));
printf("int16_t: |%5zd bytes|\n",sizeof(int16_t));
printf("int32_t: |%5zd bytes|\n",sizeof(int32_t));
printf("int64_t: |%5zd bytes|\n",sizeof(int64_t));
printf("char *: |%5zd bytes|\n",sizeof(char *));
printf("int *: |%5zd bytes|\n",sizeof(int *));
printf("long *: |%5zd bytes|\n",sizeof(long *));
printf("float *: |%5zd bytes|\n",sizeof(float *));
printf("double *: |%5zd bytes|\n",sizeof(double *));
printf("float: |%5zd bytes|\n",sizeof(float));
printf("double: |%5zd bytes|\n",sizeof(double));
printf("void: |%5zd bytes|\n",sizeof(void));
printf("'a': |%5zd bytes|\n",sizeof('a'));
}
return 0;
}
答案:
在64位系统和32位系统中,结果是不太一致的,在64位系统中,结果为:
在32位系统中,结果为:(gcc编译的时候,-m32可以编译为32位的代码,-m64可以编译为64位代码,默认是64位的代码,所以可以不加-m64)
包括在32位的单片机中的结果为:
可以看到,32位机器,不管是x86还是arm,结果是一致的。
有以下几个点需要注意:
32位机器 | 64位机器 | |
long | 4 | 8 |
所有的指针 | 4 | 8 |
还有比较特殊的,void为1,然后‘a’在C语言中,默认为int型数据,并不是表面上看起来的字符类型