常见C语言笔试题分析—sizeof讲解
1、sizeof运算符
在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的单目运算符,就像操作符++、--等一样,它并不是函数。sizeof操作符以字节形式给出了其操作的存储大小。操作数可以是一个表达式或者括号内的类型名。操作数的存储大小由操作数的类型决定。
sizeof的计算发生在编译时刻,所以它可以被当作常量表达式使用,且会忽略其括号内的各种运算,如“sizeof(a++)”中的++不执行。
2、sizeof使用方法
2.1用于变量:
sizeof(var_name) 或sizeof var_name
变量名可以不用括号括住,一般程序编写都是带括号。
2.2用于数据类型
sizeof(type)
用于数据类型必须加括号。
3 、举例(32位编译环境)
(1) char *p;
(2) char p[3];
(3) char *p[3];
(4) char p[ ]=”const”;
(5) char p[8]=”const”;
(6) char *p=”const”;
(7) int p=10;
(8) int p[3];
(9) int *p[3];
(10) void func(char p[3]){ };
(11) int **p[3][4];
(12) int (*p)[10];
分别求出如上sizeof(p)的值。
解答:
(1)指针所占内存空间为4字节,不管是char *,int *还是float * 都是4个字节,故sizeof(p)=4。
(2)p是数组,共3个元素,每个char占一个字节,故sizeof(p)=3。
(3) 指针大小为4字节,数组3个元素,故sizeof(p)=4*3=12。
(4)计算出数组的容量字节数,字符串需要增加’\0’结束符字节,故sizeof(p)=6。
(5) 数组共8个元素,每个元素大小为1字节,故sizeof(p)=8。
(6)p为指针,得到的是一个指针变量的字节数,而不是p所指的内存容量,c/c++语言没有办法知道指针所指的内存容量,除非在申请内存时记住它,故sizeof(p)=4。
(7) p的数据类型是int,故sizeof(p)=4。
(8) 数组共3个元素,每个元素长度4个字节,故sizeof(p)=12。
(9) 指针大小为4字节,数组3个元素,故sizeof(p)=4*3=12。
(10) 当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针,故sizeof(p)=4。
(11) 数组p中存放的是指针的指针,指针大小为4,数组共3行4列,故sizeof(p)=3*4*4=48。
(12) p是指针,故sizeof(p)=4。
新浪微博:@A-Di迪映像
b站:bili_20880239503