b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

C ++编程设计(5)使用sizeof

电脑杂谈  发布时间:2020-03-30 12:10:10  来源:网络整理

sizeof计算字符串长度_结构sizeof_sizeof计算结构体大小

(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)将数组名称用作操作数时,将获得整个数组所占用的空间. 当将数组名称作为参数传递给子函数时,此时数组名称已成为指针,并且计算结果将是该指针的结果. 占用空间.

sizeof计算结构体大小_结构sizeof_sizeof计算字符串长度

复制代码

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 }

结构sizeof_sizeof计算结构体大小_sizeof计算字符串长度

复制代码

答案: 正确: A,D;错误: B,C,E.

(1)sizeof计算结构是该结构占用的内存空间的结果. 该结构使用位字段定义成员. 位字段成员不能跨越两个字节,因此可以计算结构. 字节数为4,A是正确的.

(2)sizeof计算的结果是字节数,但不允许计算结构中位字段成员所占用的空间. 当然,如果它不是由位字段定义的,则可以计算出来. 所以B是错的.

(3)不允许计算函数名占用的字节数sizeof计算结构体大小,这有点莫名其妙. C是错误的.

(4)允许表达式计算函数表达式,结果是函数返回值类型的字节数,即问题的int大小,D是正确的.

sizeof计算结构体大小_结构sizeof_sizeof计算字符串长度

(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)内存中每个成员的起始位置必须是其大小的整数倍.

sizeof计算结构体大小_结构sizeof_sizeof计算字符串长度

(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万刷起来#护千玺到远方#

      热点图片
      拼命载入中...