vlambda博客
学习文章列表

常见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