#include <iostream> using std::cout; int main() { unsigned short shortVar = 5; unsigned long longVar = 65535; long sVar = -65535; cout << "shotVar: \t" << shortVar; cout << "\t Address of shortVar: \t"; cout << &shortVar << "\n"; cout << "longVar: \t" << longVar; cout << "\t Address of longVar: \t"; cout << &longVar << "\n"; cout << "sVar: \t" << shortVar; cout << "\t Address of sVar: \t"; cout << &sVar << "\n"; system("pause"); return 0; }
运行结果:
编译器在分配变量的时候会4字节对齐。所以变量的地址并不是完全靠在一起的,有间隔。
short 应该是2字节才对。至少也不应该是6字节。
你这样测试,或许更有效果:
写一个struct,连续定义这两个变量,再取地址,结果绝对不会是6.
请问这两种方法有什么区别?
@扎西德勒: 写成struct后,struct是一个数据结构,数据会按紧凑的格式存储,但是,写在类里的,可能会因为编译或运行的环境因素,相邻的两个变量的地址并非连续的。
或者你可以在现有的基础上反复运行或反复重新编译后运行,得到的结果可能是不同的。
@笨笨蜗牛: 谢谢。
直接sizeof(unsigned short)看下不就知道占多少字节了