结构体

先来说明一下,结构体存在的意义。比如说有一只猫,要在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语言结构体、枚举的更多相关文章

  1. 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符

    [源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...

  2. 06. Go 语言结构体

    Go语言结构体(struct) Go 语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. Go 语言中的类 ...

  3. 漫谈C语言结构体struct、公用体union空间占用

    先用代码说话: #include<stdio.h> union union_data0{ int a ;//本身占用4个字节 char b ;//本身占用1个字节 int c ; }; u ...

  4. OC基础--结构体 枚举做类成员属性

    结构体  枚举作类的成员属性: 定义一个学生类 性别 -- 枚举 生日 入学日期  毕业日期  --  结构体 代码示例: 声明文件 Student.h: #import <Foundation ...

  5. 解析C语言结构体对齐(内存对齐问题)

    C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.内容虽然很基础,但一不小心就会弄错.写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的 ...

  6. Go语言结构体(struct)

    Go 语言结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型. 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 结构体表示一项记录,比如保存图 ...

  7. C语言结构体定义的几种方法

    什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据 ...

  8. 对嵌入式开发C语言结构体的一点总结

    今天冬至居然不上班,公司的良心啊!这回有心情写博客和日志了,好了,废话不多说.直接看下文: 鉴于嵌入式开发过程中,C语言结构体的使用当然是必不可少.话说,基础什么的比你会更牛逼的算法更重要,基础不牢, ...

  9. C语言结构体变量私有化

    操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 问题描述 C语言结构体定义中的变量默认是公有(Public)属性,如果实现成员变量的私有(Private)化? 解决方案 ...

随机推荐

  1. PHPStorm/webstorm/PyCharm tips

    phpstorm对于使用PHP开发web的人员来说,是一个非常不错的编辑开发IDE,以前用过sublime,但是相比于storm,sublime在浏览legacy代码,类代码编辑方面明显要逊色不少.同 ...

  2. 学习笔记:Nginx反射代理使用缓存和删除其缓存文件的方法

    使用nginx做cache服务器 需求就是缓存android的软件包,后缀名是apk.话不多说,直接上配置,供参考: a-->nginx.conf user www www; worker_pr ...

  3. 《深入理解mybatis原理》 Mybatis数据源与连接池

    对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题.本文将通过对MyBatis框架的数据源结构进行详尽的分析,并且深入解析MyBatis的连接池. 本文首先会讲述MyB ...

  4. Linux下的Mysql的双向同步

    在主从复制的基础上实现双向同步 [更多参考] https://www.cnblogs.com/shuidao/p/3551238.html http://blog.csdn.net/i_bruce/a ...

  5. C#用ckplayer.js播放 MP4格式视频实现 边加载边播放

    MVC设计模式下 在View页面里面使用ckplayer.js 加载视频 ,在MP4格式视频上传之后 我发现某些视频可以边加载边播放 但是有一些又不行,找了下原因是因为视频的元数据信息在第一帧的时候就 ...

  6. 期末作品项目+ppt+设计文档,电子商城的实现,PC+IOS

    先透露几张图 ---- 可以作为文档模板来用... 下载地址 https://dev.tencent.com/u/whuanle/p/IOS_work/attachment/4563020

  7. 沉淀再出发:java中线程池解析

    沉淀再出发:java中线程池解析 一.前言 在多线程执行的环境之中,如果线程执行的时间短但是启动的线程又非常多,线程运转的时间基本上浪费在了创建和销毁上面,因此有没有一种方式能够让一个线程执行完自己的 ...

  8. Java 集合框架(常用数据结构)

    早在Java 2中之前,Java就提供了特设类.比如:向量(Vector).栈(Stack).字典(Dictionary).哈希表(Hashtable)这些类(数据结构)用来存储和操作对象组.虽然这些 ...

  9. Java基础知识强化之集合框架笔记78:ConcurrentHashMap之 ConcurrentHashMap、Hashtable、HashMap、TreeMap区别

    1. Hashtable: (1)是一个包含单向链的二维数组,table数组中是Entry<K,V>存储,entry对象: (2)放入的value不能为空: (3)线程安全的,所有方法均用 ...

  10. php初学习

    1.搭建环境:下载wamp5,然后下载安装,安装成功后在电脑的右下角会出现一个方向盘的图标,右键langage选择chinese,然后就可以用了