先看代码在看说明和和结果会让人更多的更加纯粹的思考,同时减少多余词汇造成的负担,这里只通过int类型为例试验,其他类型雷同
注意在使用sizeof时与你系统是32位或者64位有关系,同时和你环境中编译器有关
一、代码
#include<stdio.h> int main(void){ int a = 1; int b = 10223372036854775807; printf("%d\n",sizeof(int)); printf("%d\n",sizeof(a)); printf("%d\n",sizeof(b)); return 0; }
1. 2个整型变量a和b值的长度相差很大,可是通过sizeof打印的结果是相同的,那换成其他类型的变量(char等)是否也是这个现象?大家可以自己测试
2. 通过sizeof处理数据类型和此类型的变量,然后打印所得结果也是相同的,这个又是为什么?问题肯定出在sizeof的语句结构上,大家快暂停去查查sizeof在c语言中的语法
二、代码执行结果
对编译执行结果和结合上述抛出的2个问题思考思考.....
三、问题解释
int i;
sizeof有三种语句形式
1. sizeof(object); //sizeof(对象); 这里的对象可以是变量也可以是表达式 sizeof(i);
2. sizeof(type_name); //sizeof(类型); sizeof(int);
3. sizeof object; //sizeof 对象 ; sizeof i;
说明:实际上sizeof计算一个对象(变量或者表达式结果)的大小也是转换成对应类型的计算。所以统一类型不通变量其sizeof值都是一致的,和变量赋的值大小没关系。
四、延伸
1. 指针
#include<stdio.h> int main(void){ int a = 1; int * p = &a; printf("%d\n",sizeof(int)); printf("%d\n",sizeof(a)); printf("%d\n",sizeof(p)); char * pc="abc"; printf("%d\n",sizeof(pc)); int * pi; printf("%d\n",sizeof(pi)); char **ppc=&pc; printf("%d\n",sizeof(ppc)); void (*pf)(); //指针函数 printf("%d\n",sizeof(pf)); return 0; }
结果:
2.数组
通过sizeof有助于我们更好的深入了解数组
#include<stdio.h> int main(void){ char a1[]={"qwqwqw"}; int a2[3]; printf("%d\n",sizeof(a1)); //结果7 printf("%d\n",sizeof(a2)); //结果12 return 0; }
转载请注明:谷谷点程序 » c语言sizeof获取数据类型长度