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 、数组元素和数组元素地址的区别

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

相关推荐
小弥儿12 分钟前
GitHub今日热榜 | 2026-07-09:OfficeCLI 以 92% 日增幅入围
学习·开源·github
KuaCpp17 分钟前
C++进程(下)
c++
糖果店的幽灵22 分钟前
从 GPT Researcher 学习 LangChain
gpt·学习·langchain
取地址符37 分钟前
Rust学习笔记(基于Rustlings)(2):数据结构与集合
笔记·学习·rust
心中有国也有家42 分钟前
AtomGit Flutter 鸿蒙客户端:呼吸球动画
学习·flutter·华为·harmonyos
进阶的猪1 小时前
Linux 内核移植过程学习
linux·学习
来一碗刘肉面1 小时前
C++中的引用语法
c++·算法
捷瑞电子工坊1 小时前
C语言条件操作符(? :)——三分钟上手
c语言·条件操作符·编程基础·三目运算符
杜子不疼.1 小时前
【Qt初识】工程起步:项目创建、代码解读与对象树
数据库·c++·qt
A.零点1 小时前
期末复习,408考研数据结构:第一章绪论完整知识梳理与真题深度解读
c语言·数据结构·笔记·考研