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::array<double,5> da );
void show( std::array<double,5> * 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为8
4 函数重载与函数模板:
(1) 所谓的重载就是同一个函数名有不同的功能。
函数重载只需要参数列表的类型不同则可实现
(2) 使用模板:
template < typename T>
void Swap (T & a , T &b ){
T temp ;
T = a ;
a = b ;
b = T ;
}
// 同样的函数模板也是可以重载的只要参数的列表构成不同即可。
在对结构体操作时需要对其使用显式声明
template<> void Swap<struct name >( name & j1 , name & j2 );
ps:
关于一些简单的数据格式化内容:
cout.setf( ......... ) // 添加入所需要的格式化方式
ios_base::fixed ios_base::showpoint
cout.precision(n) // 设置输出小数为n位
cout.width(n) // 设置下次输出的长度,仅作用一次,需要重复设置
原文:http://blog.51cto.com/13824643/2131946