C++学习----函数篇

这次笔记主要是为了记录下自己在学习函数过程中容易忽略的点。

1.默认参数

放在一般参数之后以及避免函数出现歧义

int f(int a,int b=0) ------ok

int ferror1(int b=0,int a) ------error

int ferror2(int a,int b=0)

int ferror2(int a)

ferror2(3)------------error,并不知道调用哪个函数

2.指针参数

无约束情况下:

结果是a=20,*p=20,x=30.

用const限制指针可以保护实参对象
const约束指针参数----约束形参对象
约束形参对象
其中*p+=a;*p=*p+a出错,因为不能改变常对象

const约束指针参数----约束形参指针
约束形参指针
其中,p=&a出错,因为不能改变常量指针。

3.引用参数

函数内部的对形参的操作实际在实参对象上的操作,用const约束引用参数,那么只能访问实参对象而不能修改。
注意:只有常引用对应的实参可以是参量或者表达式,非约束的引用参数对应的实参必须是对象名。
例如:
在这里插入图片描述
那么
int a=5;
display(a) -------ok
display(4)-------ok
display(a+4)----ok

4.函数的返回

1)不应该返回局部指针
在这里插入图片描述
2)不应该返回局部变量的引用
在这里插入图片描述
5.函数的调用
函数调用使用堆栈管理----堆栈是先进后出的数据结构
函数调用—入栈
函数调用--入栈
函数调用—出栈
在这里插入图片描述
6.递归函数
重点是汉诺塔问题的理解
x,y,z三个柱子,x上的n个盘移到z上,一次只能移动一个,大盘不能压小盘。
void hanoi(int n,char x,char y,char z){
if(n == 1)
move(x,1,z);
else{
hanoi(n-1,x,z,y); --------x上n-1个需要移动到y上,z做辅助
move(x,n,z); ---------n号从x移动到z上
hanoi(n-1,y,x,z); ---------y上的n-1个需要移动到z上,x做辅助
}
}
从最简单的3,4个盘考虑,利用递归想法,考虑钱n-1个成功后第n个的做法,然后往前推。

7.内联函数
作用:减少频繁调用小子程序的运行的时间开销
机制:编译器在编译时,将内联函数的调用以相应的代码代替
声明:inline 函数名
注意点:仅在函数原型做一次声明,使用1-5行的小函数,不能还有复杂控制语句,不能有递归调用
error1:
重复说明
在这里插入图片描述
error2:当普通函数处理
在这里插入图片描述
8.函数重载
多个同名函数有不同的参数集
编译器根据不同参数的类型和个数产生调用匹配
函数重载用于处理不同数据类型的类似任务
注意:只是函数返回值不同不是函数重载,编译器无法判断如何调用
使用默认参数时一定要具有可辨别性,能让编译器辨别
9存储特性
存放程序代码:代码区(code area)
存放程序的全局数据和静态数据:全局数据区(data area)
存放程序的动态数据:堆区(heap area)
存放程序的局部数据:栈区(stack area)
自动存储类:存变量的默认状态,放在栈区。函数的参数和局部变量都是自动存储类。
静态存储类:关键词exern和static声明静态存储变量和函数标识符,放在全局数据区

函数作用域:
具有文件作用域的变量称为全局变量,具有函数作用域或块作用域的变量为局部变量。
全局变量的默认初始值为0
当局部变量和全局变量同名时,在块内屏蔽全局变量。
在块内访问全局变量,可以运用域运算符“::”

9.终止程序执行的函数
(1)abort函数
函数原型:void abort(void)
功能:中断程序的执行,返回C++系统,在stdlib.h声明
(2)assert函数
函数原型:void assert(int expression)
功能:若expression的值为false,中断程序的执行,显示中断执行文件所在的文件和程序行,返回C++系统。在assert.h声明。
(3)exit函数
原型:void exit(int status)
功能:中断程序的执行,返回退出代码,回到C++系统,在stdlib.h声明。其中退出代码status是整型常量,返回操作系统,C++看不到exit的返回值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值