引言
说起sizeof,想来大家都不陌生,她是用来计算数据所占内存空间字节数的一个操作符。
但是,很多人,尤其是初学者,甚至我的同事中一些已经开发过一段时间的编程人员对于这个操作符的使用都存在不少理解上的失误。
今天,我就简单分享一些我个人的使用心得,不是什么了不起的东西,毕竟本人也只能算是编程界的菜鸟一枚,但是希望能对初学者们有些帮助。
sizeof常数汇总
如下:
sizeof int:4
sizeof short:2
sizeof long:4
sizeof float:4
sizeof double:8
sizeof char:1
sizeof *p:4
sizeof WORD:2
sizeof DWORD:4
一个注意点
关于sizeof有一个使用注意点:
string str = "abcde";
sizeof(str)得到的是string类的大小,用sizeof(str.c_str())或者sizeof(str.data())将string类型转换成char*才能获取到这个字符串的值。
关于指针
下面说一说指针,关于指针有个经典实例,都是老生长谈啦:
经典问题:
|
|
问题解析:
|
|
这个例子是本人直接从网上拷贝的,实际上,这个我本人并不想多说,都是关于指针需要掌握的知识,也没人会这么用。不过关于指针,我个人倒是的确有一个注意点要提一提:
注意:
比如说:char* p;sizeof(p)的结果是4,sizeof(*p)相当于sizeof(char)的结果是1;当然,这不是重点,我要说的重点在于数组。是的,数组才是我要提的注意点。
通常情况下,如int a[16];char b[] = "abcde";等等来说,我们可以将这些数组看作是固定大小的指针来使用,但是,在使用sizeof(a)、sizeof(b)时,我们实际上取得的是这些“静态数组”的值,也就是说sizeof(a) = 16;sizeof(b) = 6;
只有当数组作为形参,没有固定分配内存时,sizeof这个数组的值才会按照指针计算为4字节。
struct
最后,我要讲一讲今天的重头戏,也是在使用sizeof最容易出错的地方,struct。
我先不说其他,大家先看看以下的几个struct所占的字节数应该是多少。
|
|
各位,想好了没?
想好了我可公布答案啦:
|
|
各位看客,能想清楚不?
这里我写一下我对在struct中使用sizeof的理解:
|
|
这么意思呢?
|
|
而下面有同学就问了,为啥sizeof(A4)和sizeof(A5)的值不一样啊,而且为什么不是16的倍数呢?A1和A3的sizeof值不都是16嘛?
|
|
好了,以上就是本人对于sizeof的一些浅见,如果有什么不对的地方,希望各位大神指点。
本作品采用 署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5)协议
进行许可,欢迎转载,但转载请注明来自SarielTang
,并保持转载后文章内容的完整。本人保留所有版权相关权利。
本文永久链接:http://sarieltang.github.io/2014/12/23/知识点小结/2014-12-23/index/