目录
函数的概述
函数的定义
函数的调用
关于程序运行的两大基本方针之一(可见性,作用域,存在的时间)的理解。【友情提示,另外一个是硬件端的处理过程,比如变量的储存类型,函数调用的机制参数传递的机制······】
进一步解释结构化程序设计的理念
几类比较特殊,但是很常用的函数的整理:递归函数,内联函数,重载函数,带默认值的函数,
正文:
函数的概述:函数是具有一定功能的又经常使用的独立的代码段。
函数由接口和函数体组成,函数的接口包括函数名和函数类型,和形式参数表;而函数体用于实现算法。
函数分为自定义函数和库函数(需要加标准的库文件,对了,顺便提一下using namespace std与库文件的区别,前者包含关键字的定义,后者包含的是库函数的定义)。
函数的定义:定义函数 如果定义类型与返回类型不匹配,则自动转化。
如果没有说明返回的类型,则自动定义为int型。
函数原型
return语句
函数的调用:1.调用的方式有三种:函数的语句(有返回值也可以用),函数的表达式(必须返回一个值),函数的参数(比如max(a,b,,max(c,d,e)))。
函数运行的方针之一:A:作用域:块作用域:标识符从定义开始有作用的区域
函数作用域
类作用域
可见性:内层大于外层 ::(注意作用域运算符用一次就好,最好不要用,这种东西,用了就是找麻烦)
生存周期:自己根据变量的储存的位置来看。按生存期可以将变量分为两种静态的变量和动态的变量
C++中使用的变量的储存类型有4种:auto,register,extern和statac
其中auto变量的储存于栈区,而且我们一般可以将aito省略。而register变量存储在cpu的寄存器里面。而 不是存放在内存里面,但是,寄存器这玩意有限,如果超出范围,则自动转化为auto变量。extern变量如果在一个文件中定义了某个变量,那么,如果想要在其它的文件中使用的话,必须加上extern来说明。最后一个,static,如果加上的话,则该变量为静态变量。静态变量又分为全局或者局部变量,如果局部的静态变量一开始没有被初始话,那么自动赋值为0,每一次调用局部静态变量的话,都可以使得调用上一次的值。而静态全局变量的优势在于安全性更高,不可以被其它的文件所调用,但这也是它的劣势,不能和其它的文件所共享。
{
补:全局变量和局部变量:储存的几块区域:代码区;数据区:堆区(在程序中申请执行的区域),栈区(用于存放局部的变量,先入而后出),全局和静态变量区(当一个变量被命名为全局或者静态变量的时候,就会存放在这个区域,而且会保留直到这个程序执行完毕),常量区(存放字符变量的地方)。
}
B:函数调用的执行机制:
机构化设计的理念,
几类特殊的函数 :递归函数,这种函数可以调用函数自身,进而实现处理递归问题。
内联函数,这种函数一开始就会被执行,只要在前面加一个inline.(需要注意的是:内联函数内部不能包含循环语句,和switch语句;而且内联函数的定义一定要放在调用的前面)好处就是如果利用的得当,我们可以节省,时间和空间的开销。
重载的函数:为了方便使用,可以命名几个函数名称一样的函数,他们的形式参数不同,只是因为名称相同而放在一起,这样的话,可以让编译器看、来自动选择。值得注意的三点是:重载函数只以形式参数来区分不同的函数,而不以参数名,或者函数的类型来区分,更不能将不同功能的函数写在一起,这样就会破环了可读性。
带默认值的函数:如果不提供参数,则自动以函数的默认值来输入。值得注意的几个点:默认值必须放在非默认值的参数前面。
应用:1,总结几个比较经典的值和地址传递
值传递;地址传递(可以传递一堆东西,因为是地址,所以传递过去之后就会给了这一堆数据的一个信息):A:传递一个数组;B:传递一个地址(取地址符)C:传递一个指针。
2,几个经典的操作
cin>>a(一个char型的数组名);
ofstream ofile(可以写数组名/或者写一个地址)
形参定义了一个数组,实参需要写一个数组名。
3.递归函数
内联函数的几个编写要点:第一,内联函数需要从内部来调用内联函数的函数名;第二,内敛函数需要有一个判断的终止条件,并且还要有一个终止后的返回值。
4.静态变量
静态变量的重点在于可以重复引用而值会被储存,写程序的时候记得做好以下的几件事情:第一,不要怕被重新定义后,原来的值不存在;第二,需要你灵活的设计主函数里面的条件的判断。
static int bcd=0;
bcd = a+bcd;
return bcd;
5.define的后面不需要加;