下列关于C语言中结构类型的叙述中,错误的是_____________。

admin2018-11-21  30

问题 下列关于C语言中结构类型的叙述中,错误的是_____________。

选项 A、结构第一个成员的地址和整个结构的地址相同
B、缺省条件下,编译器为每个成员按自然对齐(alignment)条件分配空间
C、结构成员按照它们被声明的顺序在内存中顺序存储
D、结构是一种复合数据类型,其构成元素只能是基本数据类型

答案D

解析 本题考查C语言数据结构方面的基础知识。
    在C语言中,结构体(struct)是C语言中聚合数据类型的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员,且这些成员可以为不同的类型,成员一般用名字访问。
    结构体的成员可以包含其他结构体,也可以包含指向自己结构体类型的指针,而通常这种指针的应用是为了实现一些更高级的数据结构如链表和树等。
    在实际项目中,结构体是大量存在的。程序员常使用结构体来封装一些属性来组成新的类型。由于C语言内部类型比较简单,程序员通常使用结构体创造新的“属性”,其目的是简化运算。结构体在函数中的主要作用就是封装。封装的好处就是可以再次利用。
    结构体的大小不是结构体元素单纯相加就行的,因为主流计算机使用32bit字长的CPU,对这类型的CPU取4个字节的数要比取一个字节要高效,也更方便。所以在结构体中每个成员的首地址都是4的整数倍的话,取数据元素时就会相对更高效,这就是内存对齐的由来。每个特定平台上的编译器都有自己的默认“对齐系数”。程序员可以通过预编译命令#pragrna pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是要指定的“对齐系数”。默认状态下,编译器为每个成员按自然对齐(alignment)条件分配空间。
    结构体的第一个数据成员放在偏移为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度决定。在数据成员完成各自对齐之后,结构体本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构最大数据成员长度决定。
转载请注明原文地址:https://kaotiyun.com/show/ORWZ777K
0

相关试题推荐
最新回复(0)