我写完上一个文章,发现我写的还是不够全面,所以,这篇文章将会延续上一个文章的内容,并且再次补充新的东西,如果还有什么地方需要补充,还请各位一一指出,如果你已经学过这些东西,大可以直接跳过,假如说之后有地方忘了,也可以返回来继续学习

我们接下来说一说C语言的构造类型,C语言中的构造类型有[数组],[结构体],[共用体],[枚举类型],让我们来一一进行说明

  • 数组:数组应该是大家了解的最早的构造类型了,为什么说数组是构造类型呢,我不知道大家当时是怎么学习的,我现在要给大家说的是,其实所有的数组都是一维数组,那我们的多维数组是怎么来的呢,是因为我们数组的元素仍然可以是数组,所以用这样的关系,我们可以创造出多维数组,接下来简单的说一说数组:
      1 #include<stdio.h>
    2
    3 int main(void)
    4 {
    5 int a[2][2]={1,2,3,4};//整形数组的定义及一些初始化的方法
    6 char b[2][2]={{'a','b'},{'c','d'}};//字符型数组的定义及一些初始化的方法
    7 a[0][1]=a[1][0]+a[1][1];//数组元素和同类型的变量是一样的,变量怎么使用,数组元素就可以怎样使用
    8 }

除此之外,还有数组名和指针的关系,你可能还去了解了语法糖等东西,但是那些对于我们入门51单片机不是必须学会的,但并不是说就可以不学了,只是当前我们入门51单片机可以暂时不用那方面的知识

  • 结构体:结构体也是C语言一个重要的知识点,就以我自己来说,我的C语言课程都没有学到这里,我不知道大家是怎么样的,但是会有一些人没有学到这里,所以我需要说一下结构体,如果说之前的数组并不是很能体现构造类型的特点,那么我们的结构体一定能体现出来

结构体是由若干"成员"组成的,其中的每一个成员可以是一个基本数据类型,也可以又一个构造类型,那么我们现在可以知道,结构体是一种新的类型,所以我们应该先对其进行构造(我们称为声明一个结构体)

  1 struct 结构体名
2 {
3 成员列表
4 };

关键字struct表明我是要声明一个结构体了,后面的结构体名是结构体的类型名(这个是要强调的,这个不是变量名,是类型名,和int一样是类型名)

  1 struct Grade
2 {
3 int Chinese;//结构体中可以有基本数据类型
4 int Math;
5 int English;
6 };
7
8 struct Student
9 {
10 int age;
11 char name[10];//可以有构造类型
12 int number;
13 char sex[10];//可以有多种不同数据类型
14 struct Grade data;//成员也可以又是一个结构体,这里有关于结构体定义的东西,我们马上会说到
15 };

就像这样的一个例子,我们就可以知道一个结构体类型(注意是类型,不是变量)是如何定义的了,成员只要合法,剩下的都随你

接下来说结构体变量的定义,和普通的变量一样,类型名加变量名,主要的有以下三种定义的方式

  1 struct student
2 {
3 char name[10];
4 int number;
5 }Stu;
6 //这个是定义结构体的同时定义变量,结构体变量为Stu
7
8 struct student
9 {
10 char name[10];
11 int number;
12 };
13 struct student Stu;
14 //这个是在定义了结构体类型之后,再定义结构体变量,同样的变量还是Stu
15
16 struct
17 {
18 char name[10];
19 int number;
20 }Stu;
21 //这个是没有结构体类型名的定义,这种类型定义变量只能是定义结构体的同时定义变量,不能在别处定义

紧接着我们就说一说结构体变量的使用,我们在访问结构体变量的时候会用到成员操作符:"."和"->",其中"."用于结构体变量,比如Stu.name就是访问Stu的name成员,而我们如果是指针类型则需要"->",比如说&Stu->name,因为我们的&Stu是Stu的指针,也就是结构体指针,所以我们想要访问结构体成员就需要使用"->"而不是".",结构体的成员和普通的变量使用起来是一样的,在这里大家可以去查阅一些资料查看具体的知识点

共用体和结构体的定义是类似的,你只需要把struct改成union,就是共用了啦,共用体和结构体用法是一样的,只是结构体的成员是同时存在的,而共用体的成员同一时间只能存在一个,在给一个成员赋值的时候,别的成员都是失效的,这就是共用体和结构体的区别

剩下的是枚举类型,这个在单片机中虽然会用到,但是你是可以不必了解的,如果你想了解,可以上网查阅资料,我之后也可能会写C语言入门的博客,到时候再看也是可以的

关于构造类型就说到这里了,想要熟练的掌握使用它,就要自己用工了

51单片机入门(补充)1--与C语言的交接的更多相关文章

  1. 51单片机入门1--与C语言的交接

    我们即将进入51单片机的编程学习,咱们今天就来讲解一下单片机中的C语言(你可以称作C51) 在说编程之前,要先说一些别的东西: 二进制,八进制,十六进制 二进制中只有数字0和1,在二进制中1+1为10 ...

  2. 基于51单片机的CAN通讯协议C语言程序

      //-----------------------函数声明,变量定义-------------------------------------------------------- #includ ...

  3. 51单片机模拟I2C总线的C语言实现

    电路原理图   EEPROM为ATMEL公司的AT24C01A.单片机为ATMEL公司的AT89C51. 软件说明 C语言为Franklin C V3.2.将源程序另存为testi2c.c,用命令 C ...

  4. 【零基础】入门51单片机图文教程(Proteus+Keil)

    参考资料: https://www.jianshu.com/p/88dfc09e7403 https://blog.csdn.net/feit2417/article/details/80890218 ...

  5. [学习笔记]15个QA让你快速入门51单片机开发

    一.C语言相关 Q1:sbit与sfr代表是什么?有什么作用? Q2:#define OSC_FREQ  22118400L这句宏命令里的“L”是什么意思? Q3:我粘贴了别人的代码,怎么发现没有un ...

  6. [新概念51单片机C语言教程·郭天祥] 1、 基础知识必备

    目录: 单片机的大致介绍         1-1.通俗定义         1-2.51系列产品         1-3.标号意思         1-4.引脚介绍         1-5.用C语言开 ...

  7. 51单片机C语言学习笔记3: 存储器结构

    MCS-51单片机在物理结构上有四个存储空间: 1.片内程序存储器2.片外程序存储器3.片内数据存储器4.片外数据存储器 但在逻辑上,即从用户的角度上,8051单片机有三个存储空间: 1.片内外统一编 ...

  8. 51单片机C语言学习笔记6:51单片机C语言头文件及其使用

    很多初学单片机者往往对C51的头文件感到很神秘,而为什么要那样写,甚至有的初学者喜欢问,P1口的P为什么要大写,不大写行不行呢?其实这个是在头文件中用sfr定义的,现在定义好了的是这样的 sfr P1 ...

  9. c语言编写51单片机中断程序,执行过程是怎样的?

    Q:c语言编写51单片机中断程序,执行过程是怎样的? 例如程序:#include<reg52.h>  void main(void)  {   EA=1;      //开放总中断   E ...

随机推荐

  1. (Java实现) 最佳调度问题

    题目描述 假设有n个任务由k个可并行工作的机器完成.完成任务i需要的时间为ti.试设计一个算法找出完成这n个任务的最佳调度,使得完成全部任务的时间最早. 对任意给定的整数n和k,以及完成任务i需要的时 ...

  2. Java实现 LeetCode 661 图片平滑器(暴力)

    661. 图片平滑器 包含整数的二维矩阵 M 表示一个图片的灰度.你需要设计一个平滑器来让每一个单元的灰度成为平均灰度 (向下舍入) ,平均灰度的计算是周围的8个单元和它本身的值求平均,如果周围的单元 ...

  3. Java实现 蓝桥杯VIP 算法训练 乘法表

    问题描述 输出九九乘法表. 输出格式 输出格式见下面的样例.乘号用""表示. 样例输出 下面给出输出的前几行: 11=1 21=2 22=4 31=3 32=6 33=9 41=4 ...

  4. Java实现蓝桥杯VIP 算法训练 矩阵乘方

    import java.util.Scanner; public class 矩阵乘方 { public static void main(String[] args) { Scanner scann ...

  5. 通知!Symantec品牌证书已正式更名为Digicert

    尊敬的合作伙伴和客户: 您好! 2017年8月2日,CA认证机构Digicert宣布正式收购 Symantec 安全认证业务.为此,Digicert宣布从2020年4月30日起,停止使用与赛门铁克(S ...

  6. 什么!你想要封装好的ajax

    ajax作为前端开发领域一个必不可少的内容,也是灵魂所在,今天就ajax的封装给大家做一个分析, 如果没有猜错的话现在基本上用原生去写ajax的意见不多了,这是肯定的 ,为什么这么说,jq的ajax大 ...

  7. 使用wrk进行http压力测试

    Posted by 微博@Yangsc_o 原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 最近做了一些服务器的工作,在做htt ...

  8. 两条命令实现nodejs快速安装

    操作系统: debian, ubuntu, fedora 当前版本: v14.4.0 一键安装命令: curl -sL https://deb.nodesource.com/setup_14.x | ...

  9. Python 报错:NameError: name 'ctypes' is not defined

    使用python中的ctypes模块可以很方便的调用windows的dll(也包括linux下的so等文件) 引入ctypes库 有两种方法 from ctypes import * import c ...

  10. vuex登录验证及保持登录状态

    不知道vuex的可以先看一下 vuex官方文档,这里就不赘述了. 实现思路:假设我们现在想要访问自己在博客园里写的博客,这时候服务器需要知道当前用户是谁,才能确定我们是否有访问权限并正确地返回我们需要 ...