现在的位置: 首页 > 综合 > 正文

sizeof浅析

2018年05月05日 ⁄ 综合 ⁄ 共 1249字 ⁄ 字号 评论关闭

        sizeof是面试笔试中一个常见的考点,这里总结一下关于sizeof的知识。

一、sizeof概念

        sizeof不是函数,而是操作符。该操作符在C++中的优先级为3,比* 、/、%运算的优先级高,和负号、正号、取地址、指针等运算符同一级别。

        sizeof的返回值为size_t,在头文件中被定义为unsigned int类型。

        sizeof的作用是返回系统分配的内存空间,单位是字节。该过程是在编译过程中完成的,因此可以使用sizeof(x)来定义数组维数。


二、sizeof用法

(1)使用类型做参数

sizeof使用类型做参数时,必须用括号将参数括起来。如sizeof(int)、sizeof(double)等。

(2)使用变量做参数

因为sizeof是操作符,所以可以直接使用变量做参数,而不需要括号,不过在编写程序时还是将括号带上,这样更清晰。

        int a;  sizeof a和sizeof(a)都是合法的。

(3)使用函数做参数

sizeof可以使用函数做参数,这时候必须使用括号。返回值为函数返回值所占用的内存空间。

    short f();
    printf("%d\n",sizeof(f()));

等同于输出sizeof(short)。

(4)使用数组做参数

由于是在编译过程中确定的值,因此计算的是编译器为数组分配的内存空间。

    char str[100]="12345";
    int a[10]={1,2};
    char str2[]="12345";
    int b[]={1,2};

sizeof(str)返回100,sizeof(a)返回10*4=40,sizeof(str2)返回6,sizeof(b)返回8。

(5)使用指针做参数

返回指针所占用的内存空间,一般是4个字节。

char *str="0123456789",sizeof(str)=4。sizeof(*str)计算的是指针指向的对象,为数组的第一个字符,返回1。

(6)使用union做参数

返回最大成员的内存大小

(7)使用结构体做参数

这个考察的内容多,参见http://blog.csdn.net/szchtx/article/details/8801583

(2)使用类做参数

参见http://blog.csdn.net/szchtx/article/details/10254007

(9)sizeof不能用于函数类型、不完全类型或位字段,因为它们的大小在编译期间不确定。


三、sizeof的主要用途

(1)与存储分配和I/O系统进行通信,如:

void *malloc(size_t size);

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);


(2)查看某类型的对象所占内存空间

void *memset(void *s, int c, sizeof(s));




参考自:http://blog.sina.com.cn/s/blog_5da08c340100bmwu.html

《程序员面试宝典》

The End——




【上篇】
【下篇】

抱歉!评论已关闭.