本文主要详细介绍了C语言中struct的用法。本文中的示例代码讲解的很详细,对我们学习C语言很有帮助。有需要的可以参考一下。
目录
范问答三种结构类型变量描述1。首先定义结构,然后定义结构变量2。在定义结构类型的同时解释变量3。直接解释结构变量。结构成员表示方法,结构指针,参数结构初始化,变量定义,同时初始化。定义公共初始化typedef和结构预声明结构对齐。
粉丝问答
一个粉丝在群里问了这样一个问题。问题已在下图中标注。
问题
头文件的结构定义如下:
typedef结构{
u8 bmRequestType
u8 bRequest
u16 wValue
u16 wIndex
u16 wLength
} USB _请求_ Header _ t;
虽然粉丝最后看懂了,但还是想借此机会整理一下结构的用法,希望能对新童鞋有所帮助。
在实际开发过程中,一组数据往往有不同的数据类型,因此数组无法满足需求。因为数组中元素的类型必须一致。为了解决这个需求,C中给出了另一种数据类型-结构,每个成员可以是任何数据类型。
将结构的类型定义为:
结构结构名称{
成员列表
};
下面的struct称为结构名,struct结构称为结构类型。只有结构类型可以定义变量,但结构名不能定义变量。注}以下是需要补充的;是的。
结构stu { XXX };
stu stu1//失败
struct stu stu1//真
三种结构体类型变量说明
有三种构造变量的方法。
1. 先定义结构,再定义结构变量
结构研究{
int age
};
struct stu stu1//定义了变量stu1
2. 定义结构体类型的同时说明变量
结构研究{
int age
} stu1
3. 直接说明结构变量
结构{
int age
} stu1
与第一种方法相比,这种方法省略了结构名,省略的结构名不能组合结构类型。没有了这个结构类型,自然就不能再定义这个结构类型的变量了。
这种结构也叫匿名结构,即没有结构名。匿名结构通常用作结构成员的变量。如下所示:
结构研究{
int age
结构{
int月;
}生日;
} stu1
su t1 . birthday . month=10;//用法
结构体成员表示方法
struct stu stu1,* pstu1
pstu1=stu1
stu 1 . age=10;//真
(stu 1)-年龄=10;//真
pstu 1-年龄=10;//真
(*pstu1)。年龄=10;//真
* pstu 1 . age=10;//失败
如果要访问变量的成员,请使用。运算符,如果访问指向指针的成员,请使用-运算符。
除了最后一个例子,上面所有的例子都是正确的。因为当务之急。运算符高于*,pstu1.age会先执行,pstu1是指针,不能被访问。运算符,需要由-operator正确访问。所以最终会被报错。
结构体指针做参数
struct stu stu1
void fun(struct stu * val);
fun(stu 1);
这里也有一些新手的误区。在函数参数部分,传入一个指针,并不意味着必须在外部定义一个指针变量struct stu *xxx,然后传入xxx。就像下面这样。
struct stu stu1
struct stu * p _ stu1=stu1
fun(p _ stu 1);
结构体初始化
定义变量的同时初始化
结构研究{
int age
} stu1={ 18 }
先定义在初始化
结构stu stu1,stu2
stu 1 . age=18;
stu2=stu1//结构可以直接赋值。
常用初始化
在开发过程中,一个结构之间会有几个成员,极其复杂。这时候通常会清除所有成员,然后构造需要的成员。
struct stu stu1
memset(stu1,0,sizeof(stu 1));
XXX _ Init(stu 1 . XXX);
typedef与struct
使用struct的结构名定义通用结构类型是复杂的。因此,结构定义经常与typedef结合使用。
如果使用下面的方法,我通常会省略结构名,因为我不打算再用struct来定义变量了。
typedef struct _stu{
int age
}斯图;
此时,STU相当于struct _stu,但名称不同。
struct _ stu stu1//真
STU stu2//真
struct STU stu3//失败,结构太多
_ stu stu4//失败,缺少结构。
前置声明
在定义一个结构时经常会出现这种情况,并且这个结构的类型需要在结构的成员中使用。首先,以下定义是正确的,如下:
结构研究{
int age
结构stu stu2
} stu1
如果与typedef一起使用,则使用重新定义的类型。你需要预先申报。
typedef struct stu STU
结构研究{
int age
STU stu2
};
这样,成员变量就不是以struct加结构名的形式定义,需要的变量可以由STU直接定义。
结构体对齐
如何对齐结构?使用了伪指令#pragma。
#杂注包(推送,2)
typedef结构stu {
迷人的性爱;
int age
}斯图;
#杂注包(pop)
2与2个字节对齐。此时sizeof(STU)等于6。因为sex对于char类型占用1个字节,但是两个字节是对齐的,所以分配给sex的内存实际上有两个字节。
请注意,字节对齐是按照2的n次方对齐的。即1、2、4、8等。它不能3字节对齐。
关于解释C语言中struct用法的文章到此为止。有关C语言中结构的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。