本文共 3808 字,大约阅读时间需要 12 分钟。
一 函数的基本内容:
(1) 关于函数的定义:通常分为有返回值与无返回值两类void functionname( parameter list) { statements ; return ; } void functionname( parameter list) { statements ; return var ; }
(2) 数组作为函数参数:
int fill_array(double ar [] , int limit ); int fill_array(double * ar , int limit ); // 都是在传递数组的地址,这个是一维函数的传递方式 int fill_array( double (* ar)[5] , int limit ); int fill_array( double ar [ ][5] , int limit ); // 二维函数的传递方式
但在c++ 中用的更多的还是“超尾”的方法来实现的,也就是传递数组的首地址与尾地址来实现的,例如:
int sum_arr ( const int * begin , const int * end ) { const int * pt ; int total ; for ( pt = begin ; pt != end ; pt++ ) total = total + *pt ; return total ; }
(3) 使用const在参数中:
以下面的这个例子来表明const在函数参数中的作用。const int * const pt = &age ;
其中第一个const表示pt所指向的那个数据是不可更改的;
而第二个const表明不可更改这个指针的指向。(4)函数与array对象:void show( std::arrayda ); void show( std::array * da ); // 使用的方式基本与数组相同 , 但是要注意一点 // 在使用指针时 da不同与数组那样是数组的地址,所以在使用时需要用 // (* da)来解除指针
(5)关于函数指针:
const double * ( *pa) ( const double * , int ) ; /* 其中const double * 表示的是返回值的类型, 为double 类型的指针; 而(*pa) 则是表明这是一个函数的指针。 */ const double * ( *pa[3]) ( const double * , int ) ; // 表示为一个函数指针的数组
二 函数的深入内容:
1 内联函数: 在任意函数声明或函数定义前加上关键字 inline ,那么这个函数就成为了内联函数。 内联的作用与c语言中的宏函数作用基本相同。2 引用变量: int initial = value ; int & backup = initial ; 在此中引用变量与原变量共用同一个地址,也就是说他们访问的其实是同一个内存单元; 在c++中使用引用这一特性,可以在函数减少一层指针的嵌套 ***但注意一点***: 当返回的类型为引用变量时需要注意绝不反回临时变量,因为此时临时变量在函数返回 时已经被释放,而返回为引用,两者使用同一个内存地址。但由于已经被释放,此时已 是非法访问。3 默认参数: 在函数的参数列表后加入 = value , 即设置了初始的值 ,如 int harpo ( int n , int m = 6 , int j = 8) ; // 此时默认在参数没有传递时,m为6,j为84 函数重载与函数模板: (1) 所谓的重载就是同一个函数名有不同的功能。 函数重载只需要参数列表的类型不同则可实现 (2) 使用模板: template < typename T> void Swap (T & a , T &b ){ T temp ; T = a ; a = b ; b = T ; } // 同样的函数模板也是可以重载的只要参数的列表构成不同即可。 在对结构体操作时需要对其使用显式声明 template<> void Swap( name & j1 , name & j2 );
ps:
关于一些简单的数据格式化内容:cout.setf( ......... ) // 添加入所需要的格式化方式ios_base::fixed ios_base::showpoint cout.precision(n) // 设置输出小数为n位cout.width(n) // 设置下次输出的长度,仅作用一次,需要重复设置转载于:https://blog.51cto.com/13824643/2131946