C 结构体(结构体定义,结构体变量,结构体指针,向函数 传递结构体,结构体 赋值,union)

C 基础 专栏收录该内容
21 篇文章 0 订阅



设计程序时,最重要的步骤之一是选择表示数据的方法。

在许多情况下,简单变量甚至是数组还不够。为此,C提供了结构体变量提高表示数据的能力,它能让你创造新的形式。

1、结构体 的定义

struct book {		//book:结构体名
	char 	title[40];		//成员
	char 	author[40];		//成员
	float 	price;			//成员
};

结构体声明中,用一对花括号括起来的是结构体成员列表,声明定义了结构体布局,其中【book】称为结构名,title、author、price称为成员
右花括号后面的分号是声明所必需的,表示结体构布局定义结束。


下面我们定义结构体变量

struct	book 	HarryPotter;	//定义结构体变量 HarryPotter

我们可以使用typedef简化结构体变量的定义,这里可以省略结构名【book】:

typedef struct {
	char 	title[40];		
	char 	author[40];		
	float 	price;			
} BookCartoon;

BookCartoon harryPotter;	//定义结构体变量 harryPotter

我们操作【结构体变量】:

harryPotter.title  = "Harry Potter";
harryPotter.author = "J.K. Rowling";

2、指向结构体 的指针

定义指向结构体的指针:

BookCartoon 	* pHarryPotter = &harryPotter;	//定义结构体指针 pHarryPotter

pHarryPotter->title  = "Harry Potter";
pHarryPotter->author = "J.K. Rowling";

3、向函数 传递结构体的信息

ANSI C允许把结构体作为参数使用。所以程序员可以选择是传递结构体本身,还是传递指向结构体指针

GPIO_InitTypeDef	GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin 	= GPIO_Pin_8;				 
GPIO_InitStructure.GPIO_Mode 	= GPIO_Mode_Out_PP; 		 
GPIO_InitStructure.GPIO_Speed 	= GPIO_Speed_50MHz;

GPIO_Init(GPIOA , &GPIO_InitStructure);		

把指针作为参数的优缺点:
(1)优点:执行起来很快,只需要传递一个地址;
(2)缺点:无法保护数据。
被调函数中的某些操作可能会意外影响原来结构中的数据。不过,ANSI C新增的const 限定符解决了这个问题。

4、结构体的特性(结构体 赋值)

现在的 C 允许把一个【结构体】赋值给另一个【结构体】,但是数组不能这样做。

5、认识 共用体

共用体union)是一种数据类型,它能在同一个内存空间中储存不同的数据类型(不是同时储存)。可以初始化共用体共用体只能储存一个值,这与结构体不同。

union person {
	int 	height;	//身高
	double 	weight;	//体重
};

共用体变量:

union person ZhangSan;	//张三
union person Class[40];	//班级

(1)第1个声明创建了一个单独的共用体变量ZhangSan,编译器分配足够的空间以便共用体变量能储存共用体声明中占用最大字节的类型:double类型。double类型占64位,即8字节。
(2)第2个声明创建了一个数组Class,内含40个元素,每个元素都是8字节。

  • 0
    点赞
  • 0
    评论
  • 6
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值