
(1)sizeof是单目运算sizeof计算结构体大小,而不是函数,用于获取操作数占用的内存空间的字节数.
(2)sizeof的操作数可以是类型名称或表达式. 如果它是类型名称,则直接获取该类型所占用的字节数. 如果是表达式,则首先分析表达式结果的类型. 占用的字节数是根据类型确定的,表达式实际上并未计算出来.
1 int a = 1;2 double b = 1.5;3 sizeof(int);//结果为44 sizeof(a); //结果为45 sizeof(b); //结果为8
(3)sizeof很少单独使用,而是与诸如内存分配或计算数组长度之类的要求结合使用.
1 //与内存空间分配配合使用2 int *ptr = (int *)malloc(sizeof(int) * 20);3 //与计算数组长度配合使用4 int count = sizeof(darray) / sizeof(double);
(4)将数组名称用作操作数时,将获得整个数组所占用的空间. 当将数组名称作为参数传递给子函数时,此时数组名称已成为指针,并且计算结果将是该指针的结果. 占用空间.


void subfunc(double darray[]) {
cout << sizeof(darray) / sizeof(double) << endl; //输出4/8=0}int main(int argc, char *argv[]) { double darray[20];
cout << sizeof(darray) / sizeof(double) << endl; //输出16/8=20 subfunc(darray);
getchar(); return 0;
}

(5)在计算字符串的长度时使用strlen. sizeof是用于获取类型或表达式占用的内存大小的运算符; strlen是用于计算字符串中字符数的函数,其中不计算字符串结尾字符\ 0.

1 struct baby 2 { 3 unsigned int gender : 1; 4 unsigned int weight : 5; 5 unsigned int week : 7; 6 unsigned int blood : 3; 7 unsigned int height : 8; 8 }; 9 int triple(int number) {10 return 3 * number;11 }12 int main(int argc, char *argv[]) {13 sizeof(baby); //A14 sizeof(baby.gender);//B15 sizeof(triple);//C16 sizeof(triple(3));//D17 sizeof(show());//E18 19 getchar();20 return 0;21 }


答案: 正确: A,D;错误: B,C,E.
(1)sizeof计算结构是该结构占用的内存空间的结果. 该结构使用位字段定义成员. 位字段成员不能跨越两个字节,因此可以计算结构. 字节数为4,A是正确的.
(2)sizeof计算的结果是字节数,但不允许计算结构中位字段成员所占用的空间. 当然,如果它不是由位字段定义的,则可以计算出来. 所以B是错的.
(3)不允许计算函数名占用的字节数sizeof计算结构体大小,这有点莫名其妙. C是错误的.
(4)允许表达式计算函数表达式,结果是函数返回值类型的字节数,即问题的int大小,D是正确的.

(5)函数返回值的类型不确定,不允许通过sizeof计算,因此E是错误的.
写出以下两个结构的sizeof计算结果

struct s1{ char a;//1 short b;//4 int c;//8 double d;//16,16刚好是double大小的整数倍
};struct s2 { char a;//1 short b;//4 double c;//16(从9开始排) int d;//20(该结果不是double的整数倍,故需要加到24)
};

数据汇总如下: (1)内存中每个成员的起始位置必须是其大小的整数倍.

(2)最终结构计算结果必须是具有最大字节数的成员的整数倍.
答案: 16,24.
2.3嵌套结构时的sizeof计算

1 struct s1 { 2 int a; 3 }; 4 struct s2 { 5 char a[4]; 6 }; 7 struct s3{ 8 char a[4]; 9 char b;10 };11 struct s4 {12 s1 a;13 char b;14 };15 struct s5{16 s2 a;17 char b;18 };

具有复杂结构的数据的摘要: 对齐数据时,应优先使用结构中最深的基本数据类型. 例如: 如果结构成员是数组,则应将数组元素的类型用作数据标准. 如果结构构件是另一种结构,则内部结构中的基本元素类型构件应用作外部结构数据. 对齐标准. 因此答案如下
1 sizeof(struct s1)=4;2 sizeof(struct s2)=4;3 sizeof(struct s3)=5;4 sizeof(struct s4)=8;5 sizeof(struct s5)=5;
原始来源
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-157722-1.html
#给烊烊520#1128生日评论集体向520万刷起来#护千玺到远方#