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 buf21024 = {0}; 速度很快,在初始化的时候就完成了。 memset(buf2, 0, sizeof(buf2)); 速度慢,有函数调用,参数入栈和出栈的耗时。 |

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

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

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

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

相关推荐
代码山河8 小时前
Python就业方向全解析:后端、爬虫、数据分析、AI你选哪个?
python·学习·架构·教程·面向对象·项目
C^h9 小时前
c++ string
开发语言·c++
听风说ml9 小时前
socket编程 【C语言】
c语言·udp·tcp·socket编程
释厄6239 小时前
AI学习层更新与跨体转移律——人类社会同构·不缺理解缺 U
人工智能·学习
raindayinrain9 小时前
c++高性能--原子操作,无锁编程,操作顺序
开发语言·c++·性能优化
学逆向的9 小时前
C++ 合并命名空间
开发语言·c++·网络安全
Zhao-Jichao9 小时前
VS2026 打包 C++ 程序生成 EXE,借助 Installer Project 扩展工具
开发语言·c++
学逆向的10 小时前
C 局部静态变量
c语言·开发语言·网络安全
小徐不徐说10 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
大都督会赢的10 小时前
C++第一节课
开发语言·c++