0031 、指针的精华:间接赋值
|-------------------------------------------------------------------------------------------|
| 指针的精华:间接赋值,C语言特有的现象。 |
| 通过指针做函数参数,通过间接赋值的方式,将一个函数中的运算结果甩出来。在主调函数中定义变量,在被调函数中通过*p来修改这个变量。通过这个方法,可以做模块的划分,接口的封装设计。 |
| 函数调用时,用实参取地址,传给形参,在被调用函数里面用*p,来改变实参,把运算结果传出来。 指针作为函数参数的精髓。 C语言特有的想象,是C语言的精华 |
| 指针做函数参数,间接赋值 ---->接口的封装设计----->模块的划分---->软件的分层 |
0032 、间接赋值
|-------------------------------------------------------------------------------------------------------------------------------------------|
| 间接赋值是指针存在的最大意义。 |
| 间接赋值的应用场景: 场景1:在一个函数内使用 场景2:在两个函数之间使用,即指针做函数参数 |
| 间接赋值成立的三个条件 条件1:定义1个变量(实参) //定义1个变量(形参) 条件2:建立关联,把实参取地址传给形参 条件3:形参去间接地的修改了实参的值 |
| 间接赋值条件应用深入分析:即 三个条件的组合,分别产生三种很重要的语法现象 条件123都写在一个函数里面,间接赋值应用场景1 条件12写在一个函数里面,条件3写在另外一个函数里面,间接赋值应用场景2 条件1 写在一个函数里面,条件23写在另外一个函数里面,间接赋值应用场景3 |
0033 、间接赋值应用场景 1 :在一个函数内使用
|----------------------------------------------------------------------------|
| 间接赋值应用场景1:在一个函数内使用 |
|
|
0034 、间接赋值应用场景 2 :指针做函数参数
|--------------------------------------------------------------------------------------------------------------------|
| 间接赋值应用场景2:在两个函数之间使用,即指针做函数参数 |
|
|
| 在函数调用的时候 用1级指针形参,去间接修改了0级指针(实参)的值。 用2级指针形参,去间接修改了1级指针(实参)的值。 用3级指针形参,去间接修改了2级指针(实参)的值。 用n级指针形参,去间接修改了n-1级指针(实参)的值。 |
0035 、 C/C++ 领域值得技术推演关键点
|----------------------------------------------------------------------------------------------------|
| C/C++领域值得技术推演的关键点: 1、*p,指针(一级指针、二级指针)做函数形参,间接赋值,即指针做输入输出 2、C++多态,多态的本质:函数指针做函数参数 1. 回调函数 2. AOP编程 |
0036 、 C 风格字符串
|----------------------------------------------------------------------------|
| C语言里面没有字符串这种类型,是通过字符数组来模拟字符串。 C风格字符串是以零结尾的字符串。 |
|
|
| char buf4[] = "abcdefg"; // 默认自动的把\0追加到buf4中,让buf4变成以\0结尾的字符串。 |
|
|
| printf函数默认按照C风格的字符串去打印以buf2的内存首地址开始的数据,直到碰到\0为止。 |
|
|
| 注意:sizeof是对数组类型进行大小测量,包括了\0,strlen是返回字符串的长度,不包括\0 |
0037 、 [] 和 * 的本质
|----------------------------------------------------------------------------|
|
|
0038、一级指针的内存四区模型
|----------------------------------------------------------------------------|
|
|
| strcpy函数:会自动补充\0 C语言可以在栈上存放字符串,可以在堆上存放字符串,可以在全局区存放字符串。 |
0039 、 return 返回值
|------------------------------------------------------|
| 1. 当return简单类型时,复制a作为返回值。 2. 在C++中,当return类时,需要详细考虑。 |
0040、两个指针指向同一块内存空间
|--------------------------------------------------------------------------------------------------------------------|
|
|
| 当copy_str函数调用时,实参p和形参from指向同一块内存空间,实参p2和形参to指向同一块内存空间。p2是栈上的内存,使用指针做函数参数,实现了在被动函数中可以修改主调函数中申请的栈上的内存,从而实现了接口的封装和设计。 |