文章目录
C语言的知识体系
一、C语言概述(历史、特点、标准)
二、数据类型(基本数据类型、输入输出)
三、基本语句及表达式、运算符(条件语句、循环语句、多路分支、goto语句、i++、++i)
四、数组(一维数组、二维数组、三维数组)
五、指针(一维指针、多维指针、数组指针、指针数组、函数指针、函数指针数组)
六、内存管理(内存泄露)
七、函数(函数声明、定义、调用、库函数使用(字符处理函数、时间函数、随机数函数))
八、编码规范(华为编码规范)
九、预处理(宏定义、宏函数、条件编译)
十、关键字(static extern register const typedef volatile inline)
十一、位操作(位运算)
十二、复合数据类型(struct union enum)
十三、文件(打开、关闭、读写、属性设置)
学习目标:
1、代码量 2、书籍阅读 3、笔记
学习要求
1、代码量:40道入门程序、力扣道题、10套编程习题、随机练习
2、书籍阅读:C陷阱与缺陷、C专家编程
一、数据类型
基本数据类型(变量定义、变量的长度、常量)
输入输出(printf)
嵌入式开发中为什么选择C语言?
1、嵌入式开发中操作系统是核心、需要移植,并在上层和底层做开发,而操作系统的核心是内核,所以内核的开发都采用C语言
为什么内核开发选择C语言?
1)能够直接访问硬件(C(硬件复杂操作) VS 汇编(硬件初始化))
2)运行效率(运行时语言)解释性语言VS运行时语言
3)移植性
3、C缺点:面向结构(代码的复用性差、代码的维护性差、代码的扩展性差)
4、C语言实现面向对象编程
5、C语言开发方向:操作系统(上层(库)、底层(BSP、驱动 ) 、实现(内核))、硬件中间件(sdk)
1、C语言基础知识点
1、机器码(运行效率、访问硬件的能力)
2、C语言之父:丹尼斯·里奇
C语言语法标准
k&RC、c89、c99、c11
gcc:100%c89+部分c99
2、数据类型分类
基本数据类型
内置:编译器自带类型
int、 short 、long、 long long、charng、 long long、char、float、double
复合数据类型
多个内置类型组成的新类型
数组、struct、union、enum(枚举)
void类型
void*(万能指针):C语言的多态
3、定义变量(注意事项:编码规范)
1、变量的可读性 :形容词_名词 (int sum_result;)一眼看懂其意思
2、循环变量可以用单个变量:int i;
4、基本类型需掌握的知识点
1、各种数据类型的字节长度(变量占有内存的大小:字节)
注:计算机表示内存大小的单位:8bit位=1个字节、16bit=2个字节=半字、32bit=4个字节=字、双字、1024kB=1MB、G、T
如何测量数据类型的大小?sizeof(运算符) sizeof(变量名)sizeof(数据类型)strlen统计字符中字符的个数
int main()
{
int num=5;
//sizeof(num);//计算数据类型和变量的内存大小
unsigned long len = sizeof num;//无符号长整型
printf("%ld\n",len);
}
printf("int * = %d\n",sizeof(int *));
printf("char * = %d\n",sizeof(char *));
//指针长度是固定长度
//指针类型:保存地址,操作系统中地址的长度是固定长度(8个字节),是由操作系统的位数决定的,64位系统是8个字节。32位系统是4个字节
//数组长度:数组长度*元素类型的长度
int array_int[100];
char src[100];
printf("array int = %ld\n",sizeof(array_int));//400
printf("array_char = %ld\n",sizeof(src));
//字符长度:int strlen(char *src)
char *ptr = "hello world";
printf("sizeof(ptr)=%ld\n",sizeof(ptr));//测量ptr指针变量的大小
printf("strlen(ptr) = %ld\n",strlen(ptr));
printf("strlen(\"hello world\") = %ld\n",strlen("hello world"));
//笔试题
char *s1 = "hello world";
char s2[100] = "hello world";
printf("sizeof(s1) = %ld\n",sizeof(s1));//8
printf("sizeof(s2) = %ld\n",sizeof(s2));//100
printf("strlen(s1) = %ld\n",sizeof(s1));//11
printf("strlen(s2) = %ld\n",sizeof(s2));//11
2、各种数据类型的取值范围
unsigned char:1个字节=8bit (0-255)
signed char:(-128-127)
3、signed vs unsigned
解决有关signed和unsigned移植带来的问题
typedef关键字:给数据类型重命名
typedef解决的问题
1、解决有关signed和unsigned带来的移植性问题
2、提高代码可读性(比如说定义长度:typedef unsinged int Len)
3、提高编码效率
4、变量和常量
1、变量的三大特点
字节长度
生命周期&作用域
存储区域
2、作用域:可见范围
局部变量:在函数体里定义的变量——所在函数(出了函数不可见)
全局变量:在函数体外定义的变量——整个全局(需要用extern外部声明)
#include<stdio.h>
int g_num = 4;//全局变量
void fun()
{
extern int g_count;//能访问到
int count=6;//局部变量
}
int g_count = 4;//上面函数(fun)访问不到
int main()
{
int num=1;//局部变量
return 0;
}
3、生命周期
所在内存空间的分配——释放的过程
局部变量:函数体执行时,分配空间,执行结束,释放空间
全局变量:所在程序执行时,分配空间,执行结束,释放空间
4、存储区域
局部变量:存储在栈空间
全局变量:存储在数据段
include<stdio.h>
extern add(int a,int b);//函数声明
extern g_count;//引用性声明
int add(int a,int b)//函数定义
{
return a+b;
}
int mian()
{
add(5,6);//函数调用
return 0;
int num;//定义性声明
}
题目:实现一个计算器,功能加减乘除
在这里插入代码片