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

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

相关推荐
Terra.K6 小时前
Java异常学习[特殊字符]
java·开发语言·学习
wuyk5558 小时前
98.C语言易混难点:字符数组与字符串指针的底层差异
c语言·开发语言·c++·stm32·嵌入式硬件·算法
峥无8 小时前
从0到1手撕红黑树:封装实现 my_map 与 my_set(SGI-STL 源码级深度解析)
开发语言·c++·笔记·算法·stl
波特率1152008 小时前
C++新特性---属性说明符与标准属性
开发语言·c++
wp123_18 小时前
IPX8 防水 Type‑C连接器:安费诺 124018792112A 与 TONEVEE TY48087‑24A 技术梳理
c语言·开发语言
不会代码的小猴9 小时前
3. 控件学习1
开发语言·c++·笔记·qt·算法
zjnlswd13 小时前
C#学习笔记4
笔记·学习·c#
minglie113 小时前
在linux环境烧录esp8266
学习
烧酒同学13 小时前
【C++】记录size of std::vector的巧妙坑
开发语言·c++·图形渲染
xqqxqxxq14 小时前
AI Agent学习:MCP与工具生态:工具选择的挑战(李博杰《深入理解 AI Agent》4.3观后总结)
人工智能·学习