0005.C/C++学习笔记5

0041 、铁律 3 :理解指针必须和内存四区概念相结合

|------------------------------------------------------------------------------------------------------------------|
| 1. 主调函数和被调函数 主调函数可以把堆区、栈区、全局数据区内存地址传给被调函数使用 被调函数只能返回堆区和全局数据区内存地址给主调函数使用 |
| 1. 内存分配方式 指针做函数参数,是具有输入和输出特性的 指针输入特性:主调函数分配内存,被调函数使用内存,使用注释/*in*/ 指针输出特性:被调函数分配内存,主调函数使用内存,使用注释/*out*/ |
| |
| C字符串函数调用方法经验: 需要站在内存四区模型和函数调用模型上去思考函数。 当指针做函数参数时:需要考虑是主调函数分配内存还是被调函数分配内存。 例如:当主调函数调用strcpy函数时,主调函数分配内存,被调函数使用内存。 |
| |
| |
| 被调函数分配内存将结果传出来的两种方法: 1. 使用return 2. 使用指针做函数参数 |

0042 、开发模型

|------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 业务模型和业务测试模型分离(即测试程序和业务代码要分开),这是实现接口的封装和设计第一步 |
| |
| 注意: 1. 在函数的开始部分:需要对函数形参的合法性做判断,当形参非法时,直接把错误的原因和错误码打印出来。 2. 函数的返回值的作用:用于指示当前函数运行完毕后的函数状态,返回0代表函数执行成功,返回其他值代表函数执行失败。如果在函数中需要修改某个变量的值,可以使用指针做函数参数的方法,来修改形参的值。 |

0043 、提高软件代码的可读性、逻辑性和健壮性

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 提高软件代码的可读性、逻辑性和健壮性:在函数的开始判断各种异常情况(包括参数异常),有异常时,直接return加错误码返回并打印错误的原因。没有异常,后面是正常的功能逻辑。这个方法可以尽量避免if中嵌套if等复杂逻辑不利于维护。这样会带来一个入口多个出口的问题,如果函数中有内存分配,可以使用goto语句解决,以免忘记内存释放。 |

0044 、指针做函数参数

|-----------------------------------------------------------------------------------------------------------|
| 通过使用指针做函数参数:即间接赋值,实现接口的封装和设计。 函数的返回值:代表当前函数的执行状态,执行成功(0)还是执行失败(非0),同时用不同的非0值表示错误的原因,1代表参数有问题,2代表不满足执行条件等。 |

0045 、指针做函数参数的优点

|---------------------------------------------------------------------------------------------------------------------------|
| 主调函数和被调函数 C语言可以在主调函数中分配内存块,然后将内存块的首地址传递给被调函数,在被调函数中可以操作这块内存块,在被调函数执行完毕返回后,内存块的操作结果可以在主调函数中看到,即主调函数可以使用。--------指针做函数参数的优点 |

0046 、项目开发中字符串模型

|-------------------------------------------------------------------------------------------------------------------------|
| 1. strstr的while 和 do while模型 2. 两头堵模型(两种写法) 项目经验:in内存块(即主调函数分配内存,被调函数使用),一般不要做修改,const出现的原因。 1. 字符串反转模型 2. 两个辅助指针变量挖字符串 |

0047 strstr while do while 模型

|-----------------------------------------------------------------------------|
| |
| |
| 注意:不要相信主调函数传给被调函数的形参是有效的,因此需要在被调函数中对形参的有效性进行判断,当形参不符合要求时,直接返回错误码并打印详细的错误原因。 |

0048 、字符串初始化为 0 的两种方法

|-------------------------------------------------------------------------------------------------|
| |
| char buf2[1024] = {0}; 速度很快,在初始化的时候就完成了。 memset(buf2, 0, sizeof(buf2)); 速度慢,有函数调用,参数入栈和出栈的耗时。 |

0049 、字符串操作的两头堵模型

|----------------------------------------------------------------------------|
| |
| 注意:不要轻易修改形参中指针变量指向的内存空间的值,尤其是形参中指针变量具有输入属性(in内存块)。 |

0050 、数组元素和数组元素地址的区别

|----------------------------------------------------------------------------|
| |

相关推荐
BirdenT2 小时前
20260519紫题训练
c++·算法
csdn_aspnet8 小时前
C语言 Lomuto分区算法(Lomuto Partition Algorithm)
c语言·开发语言·算法
fake_ss1988 小时前
AI时代学习全栈项目开发的新范式
java·人工智能·学习·架构·个人开发·学习方法
谙弆悕博士8 小时前
【附C源码】从零实现C语言堆数据结构:原理、实现与应用
c语言·数据结构·算法··数据结构与算法
Upsy-Daisy9 小时前
AI Agent 项目学习笔记(二):Spring AI 与 ChatClient 主链路解析
人工智能·笔记·学习
C+++Python10 小时前
C++ 进阶学习完整指南
java·c++·学习
sparEE10 小时前
c++值类别、右值引用和移动语义
开发语言·c++
sulikey11 小时前
个人Linux操作系统学习笔记2 - gcc与库的理解
linux·笔记·学习·操作系统·gcc·
jrrz082811 小时前
Apollo MPC Controller
c++·自动驾驶·apollo·mpc·横向控制·lateral control
南浦别a11 小时前
第102天--时隔多日的书写
学习·程序人生