文章目录
C语言第七课程笔记
每一天的笔记包含如下内容:
- 当天授课内容安排
- 课堂重点内容笔记
- 课后思考题
1. 内容安排
第一节课: 字符串理解和语法语法(字符串理解、字符串定义语法、字符串输入和输出、字符串使用注意)
第二节课: 字符串操作函数(字符串长度、字符串拷贝、字符串追加)
第三节课: 字符串操作函数(字符串比较、格式化字符串、字符串转数字)、登陆验证案例
第四节课: 字符串操作训练(计算字符串长度、字符串拷贝、字符串比较)
第五节课: 函数理解和语法(函数作用、函数语法)、函数声明作用
第六节课: 局部变量和全局变量、函数定义中的注意点
2. 课堂笔记
课堂主要内容、重要内容。
2.1 字符串语法
- 字符串以\0结尾的字符数组,用于保存文本类型数据.
- 双引号括起来的字符串会自动在最尾部增加 \0 字符.
- 字符串定义格式
char s[] = "hello world"
. - 字符串使用 %s 作为字符串输出站位符.
- Scanf 接收字符串输入时,默认碰到空格或者制表符、换行会停止读取输入内容.
- get_s 函数会读取键盘数据,直到达到指定长度字符数量、或碰到换行符.
2.2 字符串操作
1. 字符串拷贝:
1. strcpy, 将一个字符串全部拷贝到另外一个字符串中
2. strncpy,将一个字符串中指定长度拷贝到另外一个字符串中
2. 字符串长度:
1. strlen,计算字符串长度,不包含 \0
2. sizeof,计算字符串长度,包含 \0
3. 字符串拼接:
1. strcat,将一个字符串拼接到另外一个字符串尾部
2. strncat,将一个字符串指定长度拼接到另外一个字符串尾部
2.3 函数注意点
返回值:
1. C语言只允许函数返回一个结果
2. 函数没有返回值必须写 void
3. 函数的返回值可以忽略
4. 函数返回值定义的类型,一定要和函数实际返回的结果类型匹配,或者相互转换.
参数
1. 函数参数的个数可以有任意个.
2. 如果函数没有参数,必须要写 void
3. 函数的参数叫做形参,函数调用的时候分配内存,函数执行结束,参数的内存被释放。
函数体
1. 函数体可以为空
2. 函数定义不允许嵌套定义,只能在全局范围定义
函数名
1. 符合标识符的命名规则即可.
2. C语言中用小写+下划线.
2.4 void 用法
// void 用法
// 1. void 表示函数没有返回值
// 2. void 表示函数没有参数
// 3. void 表示忽略函数的返回值
// 4. void 表示忽略某个未使用的变量
2.5 局部变量全局变量
- 局部变量在函数内部定义, 函数的形参、内部定义临时变量。
- 局部变量只能在函数内部访问
- 从内存角度, 函数调用的时候才会分配内存,函数执行结束,局部变量内存回收.
- 全局变量在函数外部定义
- 全局变量可以在项目中任何文件、任何位置访问
- 从内存角度,全局变量在 main 函数执行之前创建,在程序结束之后释放内存。
- 如果全局变量和局部变量同名,默认在函数内部访问的是局部变量(就近原则)
2.6 函数声明
- 编译器看到函数调用,必须会做的工作, 函数调用检查:
- 函数的返回值检查
- 函数的参数检查
- 为了让编译器能够进行必要的函数调用检查,编译器必须要先看到函数声明或者函数定义.
- 函数声明语法:
- 把函数体的花括号去掉
- 函数声明中,形参名字可有可无
2.7 return 关键字的作用
// 1. 当函数执行到 return 语句的时候,函数马上终止执行,后续代码不再执行.
// 2. return 后面可以跟值、也可以不跟值(返回值类型是void).
// 3. return 后面既可以写变量、也可以写常量
// 4. return 返回值的类型一定要和函数的返回值类型匹配, 或者能够转换为返回值类型
C语言第八课程笔记
每一天的笔记包含如下内容:
- 当天授课内容安排
- 课堂重点内容笔记
- 课后思考题
1. 内容安排
第一节课: 函数设计原则、函数分文件编写
第二节课: 函数强化训练(计算数组中的偶数和、实现数组逆序、实现字符串转换为小写)
第三节课: 函数强化训练(输入半径计算面积、返回指定范围累加和、实现数组排序)
第四节课: 指针语法(指针变量定义、指针大小、指针初始化、指针解引用)、指针变量和普通变量区别
第五节课: 指针操作(指针类型、解引用、指针运算)、无类型指针、野指针
第六节课: const和指针、指针和数组名
2. 课堂笔记
课堂主要内容、重要内容。
2.1 函数设计基本原则
.h 头文件中编写函数声明,不能编写函数定义.
.c 文件中编写函数定义.
基本原则:
-
函数的规模要小,尽量控制在50行代码以内.
-
函数的功能要单一,不要让它身兼数职. 单一职责原则
-
在函数入口处对参数进行合法校验.
int my_divide(int a, int b) { if(0 == b) { return -1; } int ret = a / b; return ret; }
-
当函数中返回结果时,确保所有控制分支都有返回值.
int my_func() { if() { return 0; }else if() { return 0; }else { return 0; } }
2.2 指针变量和普通变量区别
- 普通变量需要占用一定大小的内存空间,指针变量也需要占用一定大小的内容空间.
- 普通变量需要先定义再使用,指针变量也需要先定义再使用
- 普通变量内存中保存的是数据,指针变量保存的地址.
- 普通变量可以进行加减乘除、赋值等运算,指针只能进行加减、赋值运算.
使用指针原则:
- 明确指针指向哪里.
- 明确指针指向内存单元的数据类型是什么?内容是什么?
2.3 指针变量理解
-
从内存角度,指针变量、普通变量没有啥区别,都是一块内存,并且这块内存都有地址。
唯一的区别:普通变量存储数据,指针变量存储地址 -
普通变量有普通变量运算规则,指针变量有指针变量的运算规则。取值、赋值、加减运算
-
从语法角度, 指针变量多了个标识
*
,以此表示这个变量中存储的是地址。 -
指针无论什么类型、无论几级指针统统都是4个字节(32位) 8字节(64位)
-
在相同平台上,无论什么类型的指针占用内存大小都是一样的
-
对指针变量取地址,才能拿到指针变量本身所占用的空间地址。如果直接使用指针变量,那么代表的是指针指向空间的地址。
2.4 修改一个变量的值
修改一个变量的值,有两种:
1. 通过变量名直接修改(前提你得能拿到变量名)
2. 通过指针间接修改(不需要拿到变量名,只需要变量地址即可)
在函数内部定义的变量只能在函数内部访问,如果想在其他函数中修改另外一个函数内的变量。只要该函数拿到这个变量的地址即可。
2.5 指针类型
-
指针类型不同,那么指针的步长就不同
char * 类型指针,步长是1个字节
int * 类型指针,步长是4个字节
double * 类型指针,步长是8个字节
-
当解引用的时候,指针类型决定了编译器从首地址开始取多少字节。
-
无类型指针, 没有步长、不能解引用。 无类型指针占用4字节或8字节。
-
任何类型转换为无类型指针的时候,不需要强制转换
2.6 指针和数组
- 数组名就是指向首元素的类型指针,数组名不能修改指向。
- 当数组名作为函数参数的时候,会被编译器转换为指针。
- 基础数据类型传参的时候,值传递。数组在传参的时候,是地址传递。
C语言第九天课程笔记
每一天的笔记包含如下内容:
- 当天授课内容安排
- 课堂重点内容笔记
- 课后思考题
1. 内容安排
第一节课: 回顾指针理解、指针和字符串
第二节课: 指针数组(整型指针数组、字符串指针数组)、const和指针
第三节课: 指针做函数参数、指针做函数返回值
第四节课: 多级指针(多级指针理解)
第五节课: 实现返回数组最值和平均值、指针实现数组冒泡排序
第六节课: 指针实现字符串拷贝、指针实现字符串拼接、指针实现字符统计
2. 课堂笔记
课堂主要内容、重要内容。
💗💗💗
print("如果文章对你有用,请点个赞呗O(∩_∩)O~")
System.out.println("如果文章对你有用,请点个赞呗O(∩_∩)O~");
cout<<"如果文章对你有用,请点个赞呗O(∩_∩)O~"<<endl;
💗💗💗