sizeof 运算符返回表达式或者类型所占内存空间的字节数. 它返回一个 size_t 类型的常量表达式.
假设有下面的结构体:
- struct Point3d{
- int x;
- int y;
- int z;
- };
可以这样进行初始化:
- Point3d pt;
- 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];
- memset(info, 0, sizeof(info));
作者观点
聚沙成塔, 集腋成裘. 一点一滴的变化, 使 C++ 变得越来越好用.
觉得本文有帮助? 请分享给更多人.
关注 [面向对象思考] , 轻松学习每一天!
来源: http://www.jianshu.com/p/6f31b80aaeee