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

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

相关推荐
h39744 小时前
DirectShow过滤器开发-视频源过滤器
c++·windows·音视频·directshow
程序猿编码6 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
西飘客7 小时前
vs 怎么根据dll 生成lib文件
c++·qt
敬往事一杯酒哈7 小时前
海康 AGV 导航读码器学习
学习
程序员老陆8 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
沐晓时光8 小时前
C语言入门,深入理解指针(3)
c语言·开发语言
qq_284274059 小时前
机械原理笔记:平面机构自由度计算(复合铰链、局部自由度、虚约束)与四杆机构入门(含考点)
笔记·学习·平面·自动化·制造
SuperByteMaster9 小时前
wfi进入之前没有清除basepri, 导致中断优先级不够,wfi 退不出来
c语言
qq_2842740510 小时前
数控铣床与加工中心笔记:铣刀与刀柄系统、G54试切对刀、镜像加工指令、孔加工工艺(钻扩铰镗)与固定循环G73/G83/G81/G76/G87/G84
笔记·学习·自动化·制造
Navigator_Z10 小时前
LeetCode //C - 1286. Iterator for Combination
c语言·算法·leetcode