这个过程,和我们定义一个整型变量,并无多大区别: int a 我们记得不同数据类型的变量,有着不同的大小(占用内存的大小) 比如:一个boo1或一个char类型的变量,占用一个字节,而一个int类型则占用4个字节 的内存 后来我们又学习数组,数组的大小除了和它的数据类型有关外,还有数组元素的个数有关。 比如: char xingMing[11]占用11个字节,而 int taZhong[30]占用4*30个字节 最后,前面的几章内,我们又学习了指针。指针类型固定占用4个字节。这是因为不管什么 类型的指针,都是要用来存储一个内存地址,而在32位的计算机上,内存地址的大小固定为4 字节(8*4=32位) 这一切我们可以用 sizeof来验证: int sl = sizeof(char) int s2= sizeof (int) nt s3= sizeof(char * int arr[10] int s4= sizeof(arr) 上面的程序执行后,s1到s4分别为:1,4,4,40 现在我们来问,我们自定义的 Baobao数据类型,它的大小是多少?换句话,也可以问:做 出如下定义之后: Baobao dabao
这个过程,和我们定义一个整型变量,并无多大区别: int a; 我们记得不同数据类型的变量,有着不同的大小(占用内存的大小)。 比如:一个 bool 或一个 char 类型的变量,占用一个字节,而一个 int 类型则占用 4 个字节 的内存; 后来我们又学习数组,数组的大小除了和它的数据类型有关外,还有数组元素的个数有关。 比如:char xingMing[11]占用 11 个字节,而 int txZhong[30]占用 4 * 30 个字节 最后,前面的几章内,我们又学习了指针。指针类型固定占用 4 个字节。这是因为不管什么 类型的指针,都是要用来存储一个内存地址,而在 32 位的计算机上,内存地址的大小固定为 4 字节(8 * 4 = 32 位)。 这一切我们可以用 sizeof 来验证: int s1 = sizeof(char); int s2 = sizeof(int); int s3 = sizeof(char *); int arr[10]; int s4 = sizeof(arr); 上面的程序执行后,s1 到 s4 分别为:1,4,4,40。 现在我们来问,我们自定义的 BaoBao 数据类型,它的大小是多少?换句话,也可以问:做 出如下定义之后: BaoBao daBao;
dabao这个变量“吃”掉了多少字节的内存呢? 我们再看一次 Baobao这个结构的定义 struct baobao char xingMing[11] int shengao float lizhong 直观上猜测, Baobao这个结构由三个成员变量组成,那么它的大小应该就是这三个成员变 量大小之和。这个猜测颇有道理,如果它是正确的话,那么, sizeof( Baobao)应等于11+4+ 让我们打开CB6,然后新建一个控制工程。然后在 Unit1.cpp里增加一些代码,使之看来 如下(黑体部分为需要增加的代码) //-- #pragma hdrs top #include <iostream. h> //-- char xingMing[11] int shenGao float tizhong
daBao 这个变量“吃”掉了多少字节的内存呢? 我们再看一次 BaoBao 这个结构的定义: s t ruct BaoBao { char xingMing[11]; int shenGao; float tiZhong; } ; 直观上猜测,BaoBao 这个结构由三个成员变量组成,那么它的大小应该就是这三个成员变 量大小之和。这个猜测颇有道理,如果它是正确的话,那么,sizeof(BaoBao) 应等于 11 + 4 + 4 = 19; 让我们打开 CB6,然后新建一个控制工程。然后在 Unit1.cpp 里增加一些代码,使之看来 如下(黑体部分为需要增加的代码): //--------------------------------------------------------------------------- #pragma hdrstop # i nclude < iostream.h> //--------------------------------------------------------------------------- s t ruct B aoBao { c h ar x ingMing[11]; i n t s henGao; f l oat t iZhong;
int size= sizeof (BaoBao) cout < Sizeof struct baobao=<< size < endl return 0: 按F9后看到运行结果 E:\d2school\ bcyl\ bhcpp'\newls-O 请按任意键继续. 奇怪, Baobao结构的大小,竟然是20。比我们猜测的19,多出了一个字节? 事情是这样的。就像我们去小店买东西,假设有一天我们要去赶飞机,走之前去小店买了点 食品,总价19元,店老板没有1元钱,于是我们为了能快点出发,就直接给他20元,告诉他 不用找零钱了。 为了效率,编译器也会有类似的动作。这称为结构的“字节对齐”,当然,这个对齐方法要 比我们的19取整到20复杂一点。关于编译器是通过什么规则来把一个结构进行扩展,我们留
} ; #pragma argsused int main(int argc, char* argv[]) { i n t s ize = s i zeof(BaoBao); c o ut < < " SizeOf s truct B aoBao = " < < s ize < < e ndl; s y stem("PAUSE"); return 0; } //--------------------------------------------------------------------------- 按 F9 后看到运行结果: (sizeof BaoBao) 奇怪,BaoBao 结构的大小,竟然是 20。比我们猜测的 19,多出了一个字节? 事情是这样的。就像我们去小店买东西,假设有一天我们要去赶飞机,走之前去小店买了点 食品,总价 19 元,店老板没有 1 元钱,于是我们为了能快点出发,就直接给他 20 元,告诉他 不用找零钱了。 为了效率,编译器也会有类似的动作。这称为结构的“字节对齐”,当然,这个对齐方法要 比我们的 19 取整到 20 复杂一点。关于编译器是通过什么规则来把一个结构进行扩展,我们留