学习嵌入式的C基础知识,主要包括几个核心知识点:三大语法结构、常用的数据类型、函数、结构体、指针、文件操作。
一、顺序结构
程序自上而下依次执行、没有分支、代码简单。
常见顺序结构有:四则运算:+,-,*(乘),/(除)以及%(求余)。
二、选择结构
if-else
switch case
三、循环结构
for循环
while循环
do-while循环
do
{
循环体;
条件控制语句;
}while (条件判断语句); // 终止条件
四、常用的数据类型
一个字节为2的8次方
四、常用的函数
1 Main函数
一个C程序就是由若干头文件和函数组成,有且只有一个主函数,即main函数。
2 strcpy函数
C语言 strcpy() 函数用于对字符串进行复制(拷贝)。
头文件:string.h
语法/原型:
char* strcpy(char* strDestination, const char* strSource);
参数说明:
strDestination:目的字符串。
strSource:源字符串。
strcpy() 会把 strSource 指向的字符串复制到 strDestination。
必须保证 strDestination 足够大,能够容纳下 strSource,否则会导致溢出错误。
返回值:目的字符串,也即 strDestination。
3 malloc函数
malloc 向内存申请一块空间, 大小为 _Size, 并返回一个指向该空间的地址. 指针类型和内存大小由程序员自行定义.
4 free函数
free()函数用于释放内存, 只需向函数传递已经通过 malloc 分配空间的指针即可.
5 strlen函数
用来返回字符串长度的. 函数参数是 指向字符数组的指针
6 strcat函数
用于拼接字符串, 即将原字符串插入目标字符串的后面. 函数参数从左到右依次是 : 指向目标字符数组的指针, 指向原字符数组的指针. 返回类型是一个 char 指针*.
7 strcmp函数
比较字符串的长短或者查看两个字符串是否相等. 其原理是将字符串的字符一一比较 ascii 值大小得到的
8 预处理
五 结构体
结构体本质上还是一种数据类型,但它可以包括若干个“成员”,每个成员的类型可以相同也可以不同,也可以是基本数据类型或者又是一个构造类型。
结构体的优点:结构体不仅可以记录不同类型的数据,而且使得数据结构是“高内聚,低耦合”的,更利于程序的阅读理解和移植,而且结构体的存储方式可以提高CPU对内存的访问速度。
结构体变量的定义可以放在结构体的声明之后:
结构体变量的定义也可以与结构体的声明同时,这样就简化了代码:
3 访问结构成员
虽然结构类似一个数组,只是数组元素的数据类型是相同的,而结构中元素的数据类型是可以不同的。但结构不能像数组那样使用下标去访问其中的各个元素,而应该用结构成员运算符点(.)。
特殊的:则用 stu1.birthday.year 访问出生的年份。
4 结构体变量的初始化:结构体变量的初始化可以放在定义之后:
六 结构体数组
结构类型作为一种数据类型,也可以像基本数据类型那样,作为数组的元素的类型。
生活中经常用到结构数组来表示具有相同数据结构的一个群体,如一个班的学生的信息,一个书店或图书馆的书籍信息等。
七 结构体与指针
当一个指针变量用来指向了一个结构变量,这个指针就成了结构指针变量。
结构指针变量中的值是所指向的结构变量的首地址。可以通过指针来访问结构变量。
八 结构体的嵌套
九 结构体与函数
结构体的成员可以作为函数的参数,属于值传递(成员是数组的除外)。如:
结构变量名也可以作为函数的参数传递,如
还可以用定义的结构体指针变量来传参
形参和实参的地址不一样,是在函数中创建了一个局部结构体,然后实参对形参进行全部成员的逐个传送,在函数中对局部结构体变量进行修改并不影响原结构体变量。这样传送的时间空间开销都比较大,特别是当成员有数组的时候,程序效率较低。所以可以考虑使用指针:
十 指针
基本格式:
基本类型 *指针变量名 = &变量名;
* 取值运算符 &取地址运算符
野指针
十一 指针与数组
一、指向数组元素的指针
2 指针的运算
众所周知,数组,存在内存中一片地址连续的区域中
即就是说,数组,在逻辑上是一个元素挨着一个元素,在物理存储上也是一个元素挨着一个元素的。
二、指针数组(数组元素是指针)
注意区分两个概念:
十二 指针与函数
1 返回值是指针的函数
指针函数:指针函数的本身是一个函数,其函数的返回值是一个指针
函数的返回值的类型既可以是整型(若没有设定,则默认为整型),实型,字符型,也可以是指针型。
返回值为指针类型的函数又称为指针类型的函数,建成指针函数。
其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个"指向返回值为…的指针(地址)
2 函数指针
如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。
十三 文件操作
1 文件指针
在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。
FILE是系统使用typedef定义出来的有关文件信息的一种结构体类型,结构中含有文件名、文件状态和文件当前位置等信息。
C语言中有三个特殊的文件指针由系统默认打开,用户无需定义即可直接使用:
2 文件的打开
任何文件使用之前必须打开
filename参数
mode参数
3 文件的关闭
任何文件在使用后应该关闭:
- 打开的文件会占用内存资源,如果总是打开不关闭,会消耗很多内存
- 一个进程同时打开的文件数是有限制的,超过最大同时打开文件数,再次调用fopen打开文件会失败
- 如果没有明确的调用fclose关闭打开的文件,那么程序在退出的时候,操作系统会统一关闭。
4 文件的读写
5 文件的随机读写
6 获取文件状态
7 删除 重命名文件
8 文件缓冲区