电子信息工程专业打工人的C语言课程笔记

前言

根据大一C语言课程(谭浩强著)的学习总结,内容仅作为个人笔记,以供参考

一、初学必知原理

1、代码是代替“人类操作计算机执行指令”这一动作的信息显示,代码是一种为程序猿可读的规则体系;程序则是计算机能识别和执行的指令,由代码经编译器生成(编码)的可执行文件(.exe)。编辑(.c、.h)-> 编译(.obj)-> 连接(.h、.obj)-> 执行(.exe),1字节 = 8位二进制数。
2、机器语言:计算机能够识别和接受的二进制代码组成机器指令,机器指令的集合为机器语言。
汇编语言:计算机低级语言,不能不同机器间通用,计算机执行效率高,但符号量大,学习难度大,多用于需要高效率的机器控制代码。
3、C语言和其他语言一样都是高级语言,但广泛用于底层开发,主要是面向过程。C语言能实现大部分汇编语言的功能,学习简单,概念形成后能够很好地学习其他语言(一般C++可兼容C语言语法)。
4、学习C语言常见文件(VS2019版与VSCode版):
“.c”:C语言源文件;“.cpp”:C++源文件;“.h”:C语言/C++头文件;“.sln”:C语言解决方案;“.obj”:二进制目标文件;“.json”(JavaScript Object Notation):一种轻量级的数据交换格式文件

二、基本知识

1.“HELLO WORLD”

#:预编译处理的标识符
<xxx.h>:尖括号包含标准头文件
“xxx.h”:双引号包含自定义头文件
stdio.h:标准输入输出头文件
printf(“输出内容”):输出语句,输出给终端
输出窗口

scanf(“输入内容(键盘输入)”):输入赋值语句,把输入内容赋值给变量
输入窗口
/**/、//: 注释符,注释不占内存空间
 

2.数据类型

char:1字节,字符类型,-128 ~ 127例:‘a’,-128;
unsigned char:1字节,无符号字符类型,0 ~ 255例:‘a’,255;
int:常见编译器内4字节,整型类型,-2147483648 ~ 2147483647;
unsigned int:常见编译器内4字节,无符号整型类型,0 ~ 4294967295;
short(short int):不用编译器内占用空间不同,短整型类型;
long(long int):不用编译器内占用空间不同,短整型类型;
float:4字节,单精度浮点型类型,数值绝对值范围为0以及1.2 x 10的-38次方 至 3.4 x 10的-38次方;
double:8字节,双精度浮点型类型,数值绝对值范围为0以及2.3 x 10的-38次方 至 1.7 x 10的-38次方;
字节笔记
enum:枚举类型,变量值仅为枚举元素,每个元素为常量;
—>枚举类型详解
枚举笔记枚举笔记枚举输出
#define用于预编译字符串替换,typedef用于编译后给数据类型起别名
—>define与typedef的区别
void:空类型,常用于定义表示函数无返回值;
struct:结构体类型,由多个基本类型或指针类型组成结构体元素,相当于一个有不同数据类型的数组;
union:共用体类型,由多个基本类型或指针类型组成共用体元素,相当于一个结构体内的元素只占用一个地址,每一次有元素变量赋值时该地址的数值被新覆盖;
基本类型 数组名[]:数组类型,用于存放多个数值,存储地址为连续一段;
基本类型*:常见编译器内4字节,指针类型,用于存储该基本类型的变量或函数地址;
unsigned表示无符号整型,每种数据类型第一位二进制数代表正负,无符号为符号位代表正数的一位二进制数
常量笔记

浮点数小数点数字间可以浮动,指数形式储存
浮点数储存
浮点数运算注意事项:
浮点数注意事项
—> 浮点数存储相关讲解

输出数据类型占用空间编译器内数据类型字节数
注:该字节长度标准只是编译器内常见的标准,如有差异以实际为准
/*****************************************************/
数据类型的隐式转换:
常见隐式语句隐式转换的数值变化在进行不同数据类型运算时,小类型先转换成大类型,最后结果类型为占空间最大的数据类型
强制转换(显示转换):
强制转换转换后数值

赋值语句等号右边用“(数据类型)”将右边数值强制转换为该数据类型后赋值给左边变量
注意:编写代码时需要注意数值的隐式转换,并且强制转换与goto语句一样,在不明确结果且非必要情况下不要使用。
 

3.运算符和表达式

“i++和++i”,算术运算符优先级大于移位运算符,“->”用于指针指向结构体成员
注意:“while和if后的括号中无论是i++还是++i,都先执行括号内的自增减,再执行大括号内的语句”
—>C语言运算符优先级运算符优先级
运算符优先级

—> 运算符注意事项
参考链接中有详细总结,需要自己牢记各个运算符及优先级,初学者尤其需要注意其中的易错点。上文中的内容为本人自己的易错点,仅当参考。
 

3.C语句

1、C语句:
预处理一行写不下:把一个预处理指示写成多行要用“\”续行,因为根据定义,一条预处理指示只能由一个逻辑代码行组成。
正常程序一行写不下:把C代码写成多行则不必使用续行符,因为换行在C代码中只不过是一种空白符,在做语法解析(语法分析)时所有空白符都被丢弃了。
字符串常量跨行: \n只能在一行中起作用,\可以实现跨行写,但是不能自动换行,只能起连接作用,可以跨行写,但是\n与\连起来用就能既换行又能跨行写。

2、条件语句
if语句:条件使用关系运算符,注意 ‘==’ 不要 ‘=’,否则只会进行赋值运算,是否执行if内的语句取决于括号内数值是否为非零值1.一般形式: 用非 0 值表示真,用 0 表示假,if(flag) 相当于 if(1 == flag),浮点数无法与 0 比较,只能用近似的值比较;
—> if语句详解
3、循环语句
for语句:注意for语句括号内的三个语句内容与执行顺序。
—> for语句详解
while语句和do…while语句:注意括号内跳出循环的条件,do…while语句比while语句先执行一遍内容再判断条件。
—> while语句详解 与 —> do…while语句好处
4、选择语句
goto、break、continue语句:程序中非必要不使用goto语句;break语句用于直接跳出循环体(可直接跳出while(1)循环);continue语句用于结束本次循环进入下一次循环。
—> goto、break、continue语句详解
—>goto、break、continue、rutern语句与exit()函数之间区别
语句笔记

4.数组

1、一维数组
类型符 数组名[常量表达式];数组元素从下标0开始,字符型数组(字符串)长度为字符个数+结束符;
—>一维数组详解
2、多维数组
近似为多个一维数组组成一个多为数组
—>多维数组详解
字符数组详解

5.函数

定义:类型名 函数名() / (void) / (参数) {}

数组传递

数组传递

—>C函数

6.指针

—>C指针解释
—>*p++的区别
链表链表使用

7.内存

变量的存储方式和生存期

//动态存储:堆区:需用malloc、calloc函数(C语言,stdlib.h)主动申请或new函数(C++),free(C语言,stdlib.h)或delete函数(C++)主动释放,程序结束时系统回收,速度慢;栈区:存储局部变量(除静态)和形式参数,先进后出(先使用的变量在最后释放),速度快
//静态存储:静态存储区:存储全局变量和静态变量和外部变量,保留上一次运算后的值,直到程序结束
//寄存器存储:存储在CPU寄存器中
//.c源文件,.h头文件,程序可包括多个文件;外部(作用域外部):括号外部,函数外部,文件外部
//全局变量:保留上一次运算后的值,直到程序结束;全局有效;只存储在静态存储区
//局部变量:动态局部变量,函数结束后释放,函数内有效,存储在栈区;static静态局部变量,存储在静态存储区
//extern:扩展作用域,外部全局变量声明或外部函数声明,(源文件)声明该变量(用于函数调用函数外部下方的全局变量)或该函数作用域扩展到该位置
//										 (头文件)声明该全局变量或该函数可被其他函数调用
//static:定义静态变量或静态函数(源文件内),static静态局部变量可保留子函数的局部变量运算后的值,存储在静态存储区,其他文件(除预编译的头文件)不可见
//											static静态函数在其他文件不可见
//regiter:定义寄存器变量,只有动态局部变量和形式参数才能定义为寄存器变量,int、char、short等才适合定义,CPU的寄存器数目有限
#include <stdio.h>
static int a1= 1;			//a1全局变量被函数调用重新赋值后,改变全局变量的值
int main()
{
	static int a2 = 1;		//a2局部变量值传递给其他函数后无返回值,不改变
	void Func1();
	void Func2(int a2);
	void Func3();
	Func1();
	Func2(a2);
	Func3();
	printf("a1=%d\n", a1);
	printf("a2=%d\n", a2);
	printf("\n");
	Func1();
	Func2(a2);
	Func3();
	printf("a1=%d\n", a1);
	printf("a2=%d\n", a2);
	return 0;
}
void Func1()
{
	a1++;
	printf("a1=%d\n", a1);
}
void Func2(int a2)
{
	a2++;
	printf("a2=%d\n", a2);
}
void Func3()
{
	static int a3 = 1;			//静态局部变量a3保留上一次运算后的值,直到程序结束
	a3++;
	printf("a3=%d\n", a3);
}

内存动态分配

8.文件输入输出

—>文件操作


总结

C语言相关博客网络资料已经较为齐全,以上仅为本人所学的知识总结,本文未涉及未学习到的知识点,其中链接网址仅作记录使用,如有侵权或内容有误,敬请联系斧正。若读者觉得本文对学习有所帮助,不妨Give a like,Respect!!!

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值