结构体c语言是什么?
在C语言中,结构体(struct)指的是一种数据结构,是C语言中复合数据类型(aggregate data type)的一类。
结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
一、成员访问
结构体成员依据结构体变量类型的不同,一般有2种访问方式,一种为直接访问,一种为间接访问。直接访问应用于普通的结构体变量,间接访问应用于指向结构体变量的指针。
直接访问使用结构体变量名.成员名,间接访问使用(*结构体指针名).成员名或者使用结构体指针名->成员名。相同的成员名称依靠不同的变量前缀区分。
二、变量存储
在内存中,编译器按照成员列表顺序分别为每个结构体变量成员分配内存,当存储过程中需要满足边界对齐的要求时,编译器会在成员之间留下额外的内存空间。
如果想确认结构体占多少存储空间,则使用关键字sizeof,如果想得知结构体的某个特定成员在结构体的位置,则使用offsetof宏(定义于stddef.h)。
匿名struct
匿名struct、匿名union以及C++的匿名class,是指既没有类型名,也没有直接用这种类型定义了对象;如果紧随类型定义之后,又定义了该类型的对象,就不算是匿名类型,与普通情形的使用是一样的。
匿名类型作为嵌套定义,即在一个外部类(这里的类是指struct、union、class)的内部定义,则编译器就在匿名类型定义之后定义一个无名变量,并把该匿名类型的数据成员的名字提升到匿名类的外部类的作用域内。
如果匿名类型是连续嵌套,则最内部的匿名类型的成员名字被提升到最外部的可用变量名字访问的类的作用域内。