从零开始学习嵌入式复习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 值;
}