C语言笔记(六)

本文围绕C语言展开,介绍了指针参数和数组参数,指出C语言以值拷贝传参,数组参数会退化为指针。还讲解了函数与指针,包括函数指针的定义和回调函数原理。阐述了指针阅读技巧、动态内存分配函数。最后分析了程序中的栈、堆、静态存储区及程序的内存布局。

第三十一节 指针参数和数组参数的分析
1、C语言会以值拷贝的方式传递参数;
2、当向函数传递数组时,将数组名看做常量指针传递数组首元素的地址;
注:C语言以高效作为最初设计目标
① 参数传递的时候如果拷贝整个数组执行效率会大大下降;
② 参数位于栈上,太大的数组拷贝会导致栈溢出;
3、二维数组参数中第一维长度可以省略;
4、参数退化的关系:
① float a[5] --> float *a
② float a[5] -->float **a
③ int a[4][5] --> int (
)[5]
5、C语言中的数组参数必然退化为指针;

第三十二节 函数与指针分析
1、函数指针用于指向一个函数;
2、函数名就是函数的入口地址;
3、可以通过函数类型定义函数指针:functype *pointer,也可以直接定义 type (*func)(parameter list);
注: pointer为函数指针变量名,type为所指函数的返回值类型,parameterlist为所指函数的参数类型列表
4、如何使用C语言跳转到某个固定地址开始执行?
分析:
通过函数指针可以在C程序中实现固定地址跳转,函数指针是实现回调机制的关键技术,回调机制中的调用者和被调用函数互不依赖。
5、回调函数原理:
① 调用者不知道具体事件发生时所调用的具体函数;
② 被调用函数不知道何时被调用,只知道需要完成的任务;
③ 当具体事件发生时,调用者通过函数指针调用具体函数;

第三十三节 指针的阅读技巧
1、左右法则
① 从最里层的圆括号中未定义的标识符看起;
② 首先往右看,再往左看;
③ 通过圆括号或方括号时可以确定部分类型,并调转方向;
④ 重复2,3步骤,直到阅读结束;
2、可通过typedef简化复杂指针的定义;

第三十四节 动态内存分配
1、malloc和free是库函数而不是系统调用,但是实现是需要操作系统支持的;
2、malloc实际分配的内存可能会比请求的多,malloc(0)合法,返回一个地址,并且需要释放;
3、当请求的动态内存无法满足时,malloc返回NULL;
4、当free的参数为NULL时,函数直接返回;
5、malloc只负责申请空间,不负责初始化;
6、realloc会重置内存大小,但是新申请的部分内存中的值为随机值;
7、calloc不仅会申请内存还会将这一片内存初始化为0,且calloc是以类型大小申请内存;

第三十五节 程序中的三国分析
1、栈(先进后出)
① 栈在程序中用于维护函数调用上下文;
② 函数中的参数和局部变量存储在栈上;
③ 栈保存了一个函数调用所需的维护信息(返回地址、参数、局部变量、调用上下文、临时变量等);
④ 每次函数调用都对应着一个栈上的活动记录(ebp、esp指针)
i. 调用函数的活动记录位于栈的中部;
ii.被调用函数的活动记录位于栈的顶部;
2、堆
① 堆是程序中一块预留的内存空间,可由程序自由使用;
② 堆中被程序申请使用的内存在被主动释放前一直有效;
3、静态存储区
① 在程序的编译期静态存储区的大小就被确定了,随着程序的运行而分配空间;
② 静态存储区主要用于保存全局变量和静态局部变量;
③ 静态存储区的信息最终会保存到可执行程序中;

第三十六节 程序的内存布局
1、程序是静态的概念,表现形式为一个可执行文件;
2、进程是动态的概念,程序由操作系统加载运行后得到进程;
3、每个程序可以对应多个进程,一个进程只能对应一个程序;
注:
运行脚本文件–>操作系统加载–>脚本解释程序–>进程–>读取并解释执行脚本
运行可执行程序–>操作系统加载–>进程
4、各个段的作用
一个堆栈段在程序运行后才正式存在,是程序运行的基础。
① 静态存储区通常指程序中的.bss和.data段;
② 只读存储区通常指程序中的.rodata段;
③ 局部变量所占空间为栈上的空间;
④ 动态空间为堆中的空间;
⑤ 程序可执行代码存放于.text段

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值