,,详解C语言中结构体(struct)的用法

,,详解C语言中结构体(struct)的用法

本文主要详细介绍了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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: