飞控入门之C语言结构体、枚举
结构体
先来说明一下,结构体存在的意义。比如说有一只猫,要在C语言程序中综合描述它,那么可以这样说,它的体重是float类型的,颜色是char类型的,它的一些食物名字是一个数组,那么如果分开定义这些变量,他们将是零散的,只能通过命名放我们看起来方便一些,但是C语言为我们准备的结构体变量便很好的解决了这个问题。
结构体的声明
struct book{
float price;
char title[MAXTI];
char author[MAXAU];
};
这样来看,一个要被描述的事物的多种属性便可以放在一起了。其中,struct 是关键字,book便是这种结构体布局的名称,其中的price,title成为成员变量,这是最基本的声明结构体的方式,当然很少被按部就班的这样做~先往下走着。
定义结构体变量
按照上面的声明方式,我们可以定义这样的一个结构体变量library,或者更多。
struct book library,book1,book2;
所以我们看到,这样定义结构体变量,就像之前的int char一样,,我们必须写上struct book,那我们可以这样
typedef struct book{
float price;
char title[MAXTI];
char author[MAXAU];
}BOOK;
所以我们声明结构体时如果用了typedef,定义结构体变量便可以简洁一些,甚至我们可以在声明时不写小写的book都可以,这应该是最常用的方式,也可用下面两种方式:
struct book{
float price;
char title[MAXTI];
char author[MAXAU];
}book1,book2;
struct {
float price;
char title[MAXTI];
char author[MAXAU];
}book1,book2;
初始化结构体
可以在声明时直接赋值,初始化,也可以在定义结构体变量时初始化
struct book{
float price=22.3;
char title[MAXTI]="C Primer Plus";
char author[MAXAU]="Stephen Prata";
};
BOOK library={22.3,"C Primer Plus","Stephen Prata"};
也可以先定义,用之前再初始化,都是一样的。
访问结构成员
既然我们用结构体把某些变量聚集在了一起,那我们用这些变量时,当然要体现一下它所属的结构体
float money;
money = library.price;
用到成员变量时,必须要 结构体名称+ . +成员变量 ,这样才可以。
声明结构数组
struct book ar_library[MAXLIB];
数组ar_library代替了以前的变量名。这样定义便说明,ar_library的每个元素都是一个book类型的结构体,引用时要写清楚
float money;
monry=ar_library[].price;
在一些芯片的底层封装函数中,会用到结构数组的方式定义成批的寄存器,比较方便,直观。
指向结构的指针
float money;
typedef struct book{
float price;
char title[MAXTI];
char author[MAXAU];
}BOOK;
BOOK book1;
BOOK * pbook; //这就是一个指向结构的指针 pbook=&book1;
money = pbook->price;
这样便定义了一个指向结构的指针pbook,用到时先要把一个结构体变量的地址给指针,用的时候要 指针 -> 成员变量
个人认为指向指向结构的指针存在的意义在于传递结构体给函数时,让计算机不至于太累,编一个简单的程序体会一下
#include "stdio.h"
typedef stuct fund{
int a=;
int b=;
}NUM;
NUM num;
int sun(const stuct fund *);
int main(void)
{
printf("%d",sum(&num));
return ;
}
int sun (const struct fund *money)
{
return(money->a+money->b);
}
枚举
枚举类型用来声明符号来表示整形常量。字面理解好像不太直观。那就直接来看个应用的例子
enum spe{red,yellow,blue};//声明枚举
enum spe color; //定义枚举变量
enum是关键字,和结构体的 struct 很像,声明时就 enum+枚举类型名+{} ; ,其中的变量如果不初始化赋值,就从0开始往后加,在例子中,就是默认 red= 0,yellow=1,blue=2,当然也可以在声明时就赋值。定义枚举变量时,和结构体类似(typedef也可以仿照着用)。然后很重要的一点,定义枚举数组往往会有妙用,大家自行发掘。
所以我们可以看到,当一些变量有自己的意义时,我们用它的时候,就可以不用都#define,而是放到枚举中,它的名字就是它的值。而且在switch语句中,我们也可以很方便的调用。
飞控入门之C语言结构体、枚举的更多相关文章
- 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符
[源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...
- 06. Go 语言结构体
Go语言结构体(struct) Go 语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. Go 语言中的类 ...
- 漫谈C语言结构体struct、公用体union空间占用
先用代码说话: #include<stdio.h> union union_data0{ int a ;//本身占用4个字节 char b ;//本身占用1个字节 int c ; }; u ...
- OC基础--结构体 枚举做类成员属性
结构体 枚举作类的成员属性: 定义一个学生类 性别 -- 枚举 生日 入学日期 毕业日期 -- 结构体 代码示例: 声明文件 Student.h: #import <Foundation ...
- 解析C语言结构体对齐(内存对齐问题)
C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.内容虽然很基础,但一不小心就会弄错.写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的 ...
- Go语言结构体(struct)
Go 语言结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型. 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 结构体表示一项记录,比如保存图 ...
- C语言结构体定义的几种方法
什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据 ...
- 对嵌入式开发C语言结构体的一点总结
今天冬至居然不上班,公司的良心啊!这回有心情写博客和日志了,好了,废话不多说.直接看下文: 鉴于嵌入式开发过程中,C语言结构体的使用当然是必不可少.话说,基础什么的比你会更牛逼的算法更重要,基础不牢, ...
- C语言结构体变量私有化
操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 问题描述 C语言结构体定义中的变量默认是公有(Public)属性,如果实现成员变量的私有(Private)化? 解决方案 ...
随机推荐
- leetcode summary-section II
151 Reverse Words in a String class Solution { public: void reverseWords(string &s) { string res ...
- MySQL复制报错(Slave failed to initialize relay log info structure from the repository)
机器重启以后,主从出现了问题,具体报错信息: Slave failed to initialize relay log info structure from the repository 解决方案: ...
- SCOM发送邮件通知
运行方式配置:1. 新建账户--Windows域账户,安全级别较高,将其分发到SCOM管理服务器2. 配置文件--通知账户--将上一步新建的账户添加到该配置文件中的 运行方式账户,管理 所有目标对象 ...
- 两天学会css基础(二)
接上一篇博客,还有css中的两个重要知识点没有说到,就是元素的浮动与定位. 第三部分:元素的浮动与清除 这部分的内容之前的博客已总结过.请查看css中的浮动与三种清除浮动的方法这篇文章. 浮动在网页中 ...
- nowcoder模拟赛
R1 D1 普及组... T1/T2 咕 T3 链接:C 小A有一个只包含左右括号的字符串S.但他觉得这个字符串不够美观,因为它不是一个合法的括号串.一个合法的括号串是这样定义的: ()是合法的括号串 ...
- 使用Jwt为.Net Core SignalR保驾护航
前言 SignalR Demo搭建起来之后,是没有相应的认证和授权功能的.于是乎,参考官方文档实现了相应的逻辑. 简单认证 首先使用稍微简单的方式实现.添加如下代码: services.AddAuth ...
- 6.7 块管理器BlockManager
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreem ...
- Java并发基础概念
Java并发基础概念 线程和进程 线程和进程都能实现并发,在java编程领域,线程是实现并发的主要方式 每个进程都有独立的运行环境,内存空间.进程的通信需要通过,pipline或者socket 线程共 ...
- windows7系统PC机耳机没有声音
排除耳机故障和主机耳机孔等硬件问题之后 可能情况: 1.进行音量设置 2.更新声卡驱动 (使用驱动程序进行检测并进行更新) 360驱动大师 驱动精灵 3.windwows相关设置存在问题 (1)打开控 ...
- PHP+JQUERY+AJAX上传、裁剪图片(2)
<script type="text/javascript"> var imgCut = { imgOpt : { imgPrototypeId : 'imgProto ...