从零开始学习嵌入式复习C_指针、结构体与函数 | 青训营笔记

104 阅读3分钟

从零开始学习嵌入式复习C_指针、结构体与函数

引言

学习的第二天,继续学习指针,结构体与函数,之前的指针掌握非常不好,这次算是掌握了一些,但是还有一些问题存在,比如说两个*号的指针,让我一下子又无存下手,所以希望后续能继续学习吧。这是今天的笔记。

一、指针

地址是内存单元的编号,内存的基本单元是字节

指针:就是地址

地址:是指针,更准确来讲是指针常量,平常所讲的指针一般为指针变量。

指针变量的定义: 数据类型 * 指针变量名

eg:

定义指针存储整形变量a的地址

int * p = NULL;
int a = 90;
p = &a;

p指向a,之后,可以通过间接访问来操作a的数值

总结:定义指针变量其实是想简介操作一片连续的空间

二、结构体

也是一种数据类型,经过构造,可以存储相同或者不同数据元素的集合

关键字

Struct

定义形式

struct 结构体名
{
  数据类型 成员1;
  数据类型 成员2;
  ....
  数据类型N 成员N;
};

结构体数据类型被构造完毕后,它的数据类型是 struct 结构体名

定义普通变量

struct 结构体名 变量名;

使用方式:变量名.成员名

定义指针变量

struct 结构体名 *指针变量名;

使用方式:指针变量名 -> 成员名

实际测试

#include <studio.h>//构造一个结构体数据类型
struct student
{
  //姓名
  char Name[20];
  //学号
  int ID;
  //身高
  float Height;
};
​
int main(int argc, const char *argv[])
{
  //定义结构体变量
  struct student stu = {{"haha"},2001,178.6};
  //定义结构体指针变量
  struct student *pStu = &stu; //指向stu
  
  printf("姓名:&s\t学号:%d\t身高:%.1f\n",stu.Name,stu.ID,stu.Height);  //普通变量方式
  printf("姓名:&s\t学号:%d\t身高:%.1f\n",pStu->Name,pStu->ID,pStu->Height);  //指针指向方式
  return 0;
}

三、函数

概念

实现一个独立功能的一个模块,经过用户封装之后,所形成的代码块称为函数,后续用户只需要通过调用该函数,来实现一个功能。

函数分类

(1)库函数或者系统调用函数:都被实现好的,用户只需正确传参调用即可

库函数:处于用户层,用户可以直接调用其完成某件事情。不需要跨用户状态的模式(用户模式,内核模式)

系统调用函数:处于内核层,操作系统提供给用户来访问内核的一组接口。需要跨用户状态模式进行交互

(2)自定义函数:用户自己为了实现功能,封装的模块,称为子函数

定义函数

函数返回值类型 函数名(数据类型1 变量名1, 数据类型2 变量名2...);
{
  //函数题
  return 值;
}