2016 - 2024

感恩一路有你

c语言结构体 C语言--结构体大小?

浏览量:4238 时间:2022-12-25 16:12:40 作者:采采

c语言结构体 C语言--结构体大小?

C语言结构体类型?

Struct是C语言中的一个关键词,用来定义结构化数据类型。问题中两个定义的区别在于,第一个为student数据类型重新定义了一个类型别名,而第二个只是表示一个名为student的数据结构类型。两者的主要区别在于后面直接定义变量的时候。如下,可以直接在结构后面定义一个zhang_san的结构变量。struct student { int num struct student * next } Zhang _ San和第一个的定义,会有错误。TypeStruct Student { int num struct Student * next } Student Zhang _ SAN扩展:“结构”是一种构造的数据类型,现在俗称自定义数据类型,它由若干个“成员”组成。每个成员都可以是基本数据类型或构造类型。结构是一种“构造”的数据类型,所以在被解释和使用之前,它必须被定义,也就是被构造。就像在解释和调用函数之前定义函数一样。定义结构的一般形式是:struct结构名{//成员表列}成员表由几个成员组成,每个成员都是结构的一部分。每个成员还必须以“类型描述符成员名”的形式给出一个类型描述。成员的命名应该符合标识符的书写规则。例如:struct stu { int num char name[20]char sex float score }在这个结构定义中,结构名是stu,由4个成员组成。第一个成员是num,一个整数变量;第二个成员是name,一个字符数组;第三个成员是性别,一个性格变量;第四个成员是score,一个浮点变量。请注意,括号后面的分号非常重要。

c语言的函数体和结构体区别?

在C语言中,结构和函数有着本质的区别。结构是用户自己定义的数据类型,但功能完全不同。函数用于实现某些功能。比如想在一群学生中找一个学生,可以用函数来实现。

如果要将学生信息作为一个整体存储在一个数据类型中,可以定义一个结构,其中某个成员存储学号、某个姓名等等。

C语言--结构体大小?

结构布局的一般实现如下(不包括位域和灵活数组):

第一个成员偏移为0(标准要求)。

后一个成员需要在前一个成员之后(标准要求)。偏移量是确保成员不与前一个成员重叠的成员对齐方式的最小整数倍。

结构的对准是每个构件的最大对准。结构的大小是可以保证最后一个成员对齐的最小整数倍。

允许标准结构更加一致或布局“松散”(有更多的间隙),但在实现中通常不是这样。

通常,数组类型的对齐方式与元素类型的对齐方式相同。

这里的规则适用于成员和元素是否是结构。

根据题主的描述,测试使用的平台使用LP64数据模型。短整型大小和对齐是2个字节,整型大小和对齐是4个字节,长整型和指针大小和对齐是8个字节。

结构P1 { int a char b int c char d }

偏移量A为0,偏移量B为4,偏移量C为8(大于4 ^ 1的4的最小整数倍),偏移量D为12。P1对齐为4,大小为16。

结构P2 { int a char b char c long d }

偏移量A为0,偏移量B为4,偏移量C为5,偏移量D为8。P2对齐8,大小为16。

结构P3 { short a[3] char b[3] }

偏移量A为0,偏移量B为6。P3与2对齐,大小为10。

结构P4 { short a[3] char *b[3] }

偏移量A为0,偏移量B为8(大于0 ^ 6的8的最小整数倍)。P4与8对齐,大小为32。

结构P5 {结构P3 a[2]结构P2 t}

偏移量A为0,偏移量T为24(大于0 ^ 20的8的最小整数倍)。P5对齐为8,大小为40。

c中的类型大小可以通过sizeof获得,类型对齐可以通过_Alignof获得,成员偏移量可以通过宏offsetof获得。

结构 成员 类型 大小 数据类型

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。