C语言提高 (3) 第三天 二级指针的三种模型 栈上指针数组、栈上二维数组、堆上开辟空间
1 作业讲解
- 指针间接操作的三个必要条件
- 两个变量 其中一个是指针
- 建立关联:用一个指针指向另一个地址
- *
- 简述sizeof和strlen的区别
strlen求字符串长度,字符数组到’\0’就结束
sizeof是看数据类型占用大小(字节
- 何为野指针
声明指针变量后,内部数是随机的,为了避免野指针,初始化的时候要设为NULL
使用完之后,依然要设为NULL
2 昨日回顾
3 字符串易犯错误模型
判断一个指针是否合法应该看这个指针的值是不是NULL 而不是看*的内容
(错,最后a的位置已经变了,
4 c语言中的const
const int b; //具有了只读的属性
int*a = &b; *a = 30; // 变了
const char* c ‘指针指向的值不能改’
char*const d; 指针不能改
5 字符串练习
二级指针第一种输入模型:
栈上的指针数组:
(指针数组,数组内部存的是字符串常量区的数据
6 字符串解析key-value练习
二级指针第二种输入类型:
栈上的数组指针:
(注意,不能用char ** array 作为形参,因为 char **array的步进是4
7 中午回顾
二级指针第三种模型:
堆上开辟空间:
8 二级指针作为传入参数1
9 二级指针作为传入参数2
10 二级指针作为传入参数3
11 多级指针作为函数参数
12 二级指针的内存四区图
指针数组:
二维数组:
手工二维内存:
13 替换子字符串练习
思路:定义两个指针
一个指针先走,遇到要替换的停下来,把之前这段复制到dst中,然后指针加要被替换的字段的长度。接下来,重新走这个流程,直到最终指针指向’\0’