函数的基本概念
- 不能返回局部变量地址值
- 可以返回指向数组或函数的指针,但不能返回数组类型或指针类型
- auto func(int x)->int(*)[10];函数的定义都可用尾置类型返回指向数组的指针
- return
- 退出当前函数的调用,并将返回值返回给调用者
- 调用时,进行stack unwinding,调用局部对象析构函数,清理局部对象
- 如果在main中,则之后交由系统调用exit
- return EXIT_SUCESS:底层调用_exit函数,做退出动作
- exit
- 调用时,会做大部分清理工作,但不会销毁局部对象
- 进行的销毁工作:
- 销毁所有static和global对象
- 清空所有缓冲区
- 关闭所有`I/O`通道
- _exit
- 调用之后立即进入内核
- abort
- 不进行任何清理工作,直接终止程序
- C++可以在函数声明时提供一个默认参数
- 当函数调用时没有指定该参数,编译器会自动调用默认参数值代替实参
- 声明和定义时时,只有一个位置有默认参数
- C++可以为函数提供占位参数
- 占位参数只声明参数类型,没有具体形参名称
- 占位参数可以为以后程序扩展留下线索,并兼容C中出现的不规范写法
- 传值:函数调用期间,实参将自己的值拷贝一份给形参
- 传址:函数调用期间,实参将地址值拷贝一份传给形参
- 引用:
- 数组作参数形参,传递的不是整个数组,而是数组的首地址
- 结构体作函数形参,可传址,传址,引用
- 函数的返回值有副本机制:
- 结构体数组没有副本机制
- 若结构体内部存在数组,该对象也有副本机制
函数指针
- void (*p)(int,int);
- p = fun;
- typedef void(*FP)(int,int);
- typedef void(F)(int,int);
- 通过函数名调用
- 通过函数地址调用,即函数指针调用
- 函数名会被解析为函数地址
- 将函数名赋值给函数指针,就相当于让该指针指向该函数
-函数重载其实是几个不同的地址,即不同的函数
- 其指向:系统为函数分配一段内存地址空间,函数指针就指向这块空间首地址
- 想通过函数指针实现函数重载是不可能是,因为函数指针已经固定指向了某个地址
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!