不使用sizeof求类型长度
一开始,我是想用相邻的地址相减,答案应该就出来了;
#include<iostream> using namespace std; void main() { int x[2] = {0}; int *p1 = &x[0]; int *p2 = &x[1]; cout << p2 - p1; }
然后案等于1;
找了下资料,发现原来,C语言的标准中规定了 加法与减法运算对于地址的操作和对于值的操作是不同的。
当一个加法运算,加号左边的操作数是一个指针,而右边的操作数是一个整数时,这个整数值先乘以指针类型的大小(sizeof(int)),然后再加到左边的数上。当同一个数组的两个成员的指针相减时,其差值为:地址值的差,再除以一个数组成员的sizeof(int)。这个结果代表了两个指针对应元素的下标之差。
所以,把地址强制类型转换成int 或者char型,然后再相减就可以得出我们想要的size了。
#include<iostream> using namespace std; void main() { int x[2] = {0}; char *p1 = (char *) &x[0]; char *p2 = (char *) &x[1]; cout << p2 - p1; }
其他的方法还有利用数据的存储的,比如当系统在存-1这个数的时候,是存成0xffff或者0xffffffff有几个f会由类型长度决定;
#include<iostream> using namespace std; void main() { int x; x = -1; switch (x) { case 0xffff: cout<<"2" ; break; case 0xffffffff: cout<<"4" ;break; } }或者通过对数值1不停的乘2,最后到临界(over之后会等于0)比较大小,确定是多少也可以,方法应该还蛮多的,理解这部分,对数据存储还蛮有用。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 全面解析sizeof(下)
- 下一篇: 使用sizeof()计算类的大小