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

sizeof()用法摘要

电脑杂谈  发布时间:2020-05-11 06:12:34  来源:网络整理

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

sizeof()函数: 计算数据空间中的字节数

1. 与strlen()比较

strlen()计算字符数组中的字符数,并以“ \ 0”结尾,并且不将数组元素计数为'\ 0'.

sizeof计算数据(包括数组,变量,类型,结构等)所占用的内存空间以字节表示.

2. 指针和静态数组的sizeof操作

指针可以视为变量的一种. 所有指针变量的操作结果大小为4.

注意: int * p; sizeof(p)= 4;

但是sizeof(* p)等同于sizeof(int);

对于静态数组,sizeof可以直接计算数组的大小;

例如: int a [10]; char b [] =“ hello”;

sizeof(a)等于4 * 10 = 40;

sizeof(b)等于6;

注意: 当数组用作类型参数时,数组名称用作指针! !

没有乐趣(char p [])

{sizeof(p)等于4}

经典问题:

双*(* a)[3] [6];

cout << sizeof(a)<< endl; // 4a是一个指针

cout << sizeof(* a)<< endl; // 72 * a是具有3 * 6指针元素的数组

cout << sizeof(** a)<< endl; // 24 ** a是数组一维中的6个指针

cout << sizeof(*** a)<< endl; // 4 *** a是一个维度中的第一个指针

cout << sizeof(**** a)<< endl; // 8 **** a是一个双变量

问题分析: a是一个非常奇怪的定义. 他表示一个指向double * [3] [6]类型的数组的指针. 由于它是一个指针,因此sizeof(a)为4.

由于a是实现double * [3] [6]的指针,因此* a表示double * [3] [6]的多维数组类型,因此sizeof(* a)= 3 * 6 * sizeof(double *)=72. 类似地,** a表示类型double * [6]的数组sizeof计算结构体大小,因此sizeof(** a)= 6 * sizeof(double *)=24. *** a表示元素之一是double *,因此sizeof(*** a)=4. 至于**** a,它是double,因此sizeof(**** a)= sizeof(double)= 8.

3. 格式写法

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

sizeof运算符,您不能在变量或对象中添加括号,但如果是类型,则必须添加括号.

4. 使用sizeof时关于字符串的注意事项

string s =“ hello”;

sizeof(s)等于字符串类的大小,而sizeof(s.c_str())获得字符串的长度.

5. 并集和结构的空间计算

通常,遵循两个原则:

(1)总空间是占用最多空间的成员(类型)所占用字节数的整数倍

(2)数据对齐原理----内存按结构成员的顺序排列. 将其布置到成员变量时,其前面的空间大小必须是成员类型大小的整数倍. 然后填写,依此类推. . . .

注意: 数组是作为单个变量而不是作为一个整体一个一个地放置的. 如果成员中有自定义类和结构,请注意数组问题.

示例: [其他帖子的报价]

由于对齐问题,结构的大小变得更加复杂,请参见以下示例: (默认对齐下)

结构s1

{

字符a;

双b;

int c;

char d;

};

结构s2

{

字符a;

字符b;

int c;

双d;

};

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

cout << sizeof(s1)<< endl; // 24

cout << sizeof(s2)<< endl; // 16

它也是两种char类型,一种int类型和一种double类型,但是由于对齐问题,它们的大小不同. 元素放置方法可用于计算结构的大小. 让我举一个例子: 首先,CPU确定结构的边界. 根据上一节的结论,s1和s2的边界采用最大的元素类型,即对置8的两倍类型. 然后开始放置每个元素.

对于s1,首先将a放置在8的相对边界上,假设它为0. 这时,下一个空闲地址为1,但是下一个元素d是double类型,需要将其放置在对面8的边界. 关闭地址是8,所以d放置在8,下一个空闲地址变成16,下一个元素c是4,可以满足16,所以c放置在16,下一个空闲地址地址变成20,下一个元素d必须在边界1上,并且它也落在边界上,因此d放置在20处,并且结构在地址21处结束. 由于s1的大小必须是整数倍8sizeof计算结构体大小,保留21-23的空间,而s1的大小变为24.

对于s2,首先将a放在8的相对边界上(假设它为0). 这时,下一个空闲地址为1,而下一个元素的相对边界也为1,因此b放置在1中,并且下一个空闲地址变为2;下一个元素c的下一个边界为4,因此最接近2的地址4放置在c中,下一个空闲地址变为8,而元素d的下一个边界为8,因此d放置在8中. 放置元素,结构结束于15,总占用空间为16,恰好是8的倍数.

这里有一个陷阱. 对于结构中的结构成员,不要认为其对齐方式就是其大小,请参见以下示例:

结构s1

{

字符a [8];

};

结构s2

{

双d;

};

struct s3

{

s1 s;

字符a;

};

struct s4

{

s2 s;

字符a;

};

cout << sizeof(s1)<< endl; // 8

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

cout << sizeof(s2)<< endl; // 8

cout << sizeof(s3)<< endl; // 9

cout << sizeof(s4)<< endl; // 16;

尽管s1和s2的大小为8,但s1的对齐方式为1,而s2的对齐方式为8(两倍),因此s3和s4之间存在这种差异.

因此,当您自己定义结构时,如果空间狭窄,则最好考虑对齐因素以在结构中排列元素.

补充: 不要让双倍干扰您的位字段

在结构和类中,可以使用bit字段指定成员可以占用的空间,因此bit字段可以在一定程度上节省结构所占用的空间. 但是请考虑以下代码:

结构s1

{

int i: 8;

int j: 4;

双b;

int a: 3;

};

结构s2

{

int i;

int j;

双b;

int a;

};

struct s3

{

int i;

int j;

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

int a;

双b;

};

struct s4

{

int i: 8;

int j: 4;

int a: 3;

双b;

};

cout << sizeof(s1)<< endl; // 24

cout << sizeof(s2)<< endl; // 24

cout << sizeof(s3)<< endl; // 24

cout << sizeof(s4)<< endl; // 16

如您所见,double的存在会干扰位字段(请参见sizeof算法的上一部分),因此,在使用位字段时,最好将float类型和double类型放在开头或程序结束.

sizeof int: 4

sizeof short: 2

sizeof long: 4

floatof浮点数: 4

sizeof double: 8

大小字符: 1

sizeof p: 4

word的大小: 2

DWORD的大小: 4

原始文本来自:


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-206016-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

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