c语言sizeof如何计算(C11新特性14)

c语言sizeof如何计算(C11新特性14)(1)

sizeof运算符

sizeof运算符返回表达式或者类型所占内存空间的字节数。它返回一个size_t类型的常量表达式。

假设有下面的结构体:

struct Point3d{

int x;

int y;

int z;

};

可以这样进行初始化:

Point3d pt1;

memset(&pt,0,sizeof(pt));

也可以这样初始化:

Point3d pt1;

memset(&pt1,0,sizeof(Point3d));

也可以批量初始化:

Point3d ptarray[100];

memset(ptarray,0,sizeof(ptarray));

许多和内存操作相关的处理都需要知道数据或类型占用内存空间的大小。这时就可以使用sizeof运算符。sizeof计算的对象可以是数据,也可以是类型。

有一点需要注意的是,如果运算的对象是指针,那么取得的就只能是指针本身的大小而不是指针指向数据的大小。例如下面的代码就不能初始化所有的x数组元素。

int x[10];

int *p = x;

memset(p, 0, sizeof(p)/sizeof(*p));

C 中的sizeof

假设有如下结构体:

struct Image{

int width;

int height;

char data[10000];

};

可以这样初始化data成员:

Image image1;

memset(image1.data, 0, sizeof(iamge1.data));

C 11以后,也可以这样初始化:

Image image1;

memset(image1.data, 0, sizeof(Image::data));

注意sizeof的的参数,可以不通过对象,直接使用作用域运算符来获取成员的大小。

小测验

下面的代码有问题么?

int data[100];

constexpr size_t cnt = sizeof(data)/sizeof(*data);

int info[cnt * 2];

msmet(info, 0, sizeof(info));

作者观点

聚沙成塔,集腋成裘。一点一滴的变化,使C 变得越来越好用。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页