使用C++函数时需要提供的内容:
1)函数的定义
2)函数原型
3)函数调用
一、函数基本知识
1、函数的定义
函数的定义分为有返回值和无返回值两种,无返回值函数称为void函数,格式:
void functionName(parameterList)
{
statement(s);
return; //可选
}
有返回值:
typeName functionName(parameterList)
{
statement(s);
return value; //必须
}
返回值可以是常量、变量、表达式,其返回的类型必须是typeName类型或者可以转换为typeName的类型。返回值可以是除数组
外任何类型(整型、浮点型、指针、结构、对象),C++虽不允许直接返回数组,但允许数组作为结构或对象的一部分来返回。
2、函数原型
作用:告诉编译器函数返回类型、参数类型和数量。
原型是一条语句以分号结束,原型中不必提供变量名,只需有类型列表即可(意味着原型中的变量名不必与定义中的名字相同,但类型需要一致)。
#include <iostream>
int sum(int,int); // #1
int main()
{
using namespace std ;
int a ,b;
cin >>a >> b ;
a = sum(a,b); // #2
cout << a ;
return 0 ;
}
/************#3***********/
int sum(int c,int e)
{
int sum1;
sum1 = c + e ;
return sum1 ;
}
如上述代码中,#1为函数原型,#2为函数调用,#3为函数定义。
二、函数参数传递
1、按值传递
顾名思义,就是在函数调用的时候将数值传递给函数,在此过程中以上述sum函数为例,在#2处调用时,程序将main函数中的变量a ,b 的数值传递给sum参数列表中的变量c,e,相当于将变量a,b的值复制一份给c,e,所以变量a,b的值
称为实参,而变量c,e称为形参
在函数内部声明的变量称为局部变量(包括函数的参数),在函数退出的时候局部变量所占用的内存会自动释放。
2、将数组传递给函数
#include <iostream>
int sum(int arr[],int); // #1
int main()
{
using namespace std ;
int arr1[5] = {
21, 25, 56, 14,19};
int a ;
a = sum(arr1,5); // #2
cout << a ;
return 0 ;
}
/************#3***********/
int sum(int arr[],int b)
{
int arr_sum = 0;
for (int i = 0 ;i < b ; i++ )
{
arr_sum += arr[i];
}
return arr_sum;
}
以上代码为例,在sum函数中第一个参数 int arr[ ] ,并不表示一个数组(所以也不会将实参复制一份),而是一个指针等价于 int * arr(两者只在函数头或函数原型中等价,在其他地方两者的含义并不相同) ,但在函数中使用时可以将其视为数组使用,如上sum函数一样。
同时在调用sum函数时,传递给函数的是数组名,数组名表示数组中第一个元素的地址,对数组名使用sizeof可以得到数组的长度(以字节为单位),所以实质上main函数中传递给sum函数的第一个参数是arr数组的地址给sum函数,同时意味着sum函数可以修改main中定义的arr数组(原始数组),若不想让函数修改原始数组可以在函数原型和定义的地方加上const如:int sum (const int arr[], int b )
,这意味着arr是常量不能通过arr去修改数组内部的值,但原始数组可以不是常量。
3、指针与const
指针与const的组合有两种不同的方式
1)、是让指针指向一个常量对象,以防止通过指针去修改所指向的值,但可以改变指针所指向的位置
2)、是让指针本身成为一个常量,以防止改变指针所指向的位置,但可以通过指针去修改所指向的值
//#1
int a = 12;
const int * p1 = &a ;
//#2
int * const p2 = &a ;
上述中#1是第1种情况,让指针指向一个常量对象,不能通过指针去修改a所在位置的值,但可以通过变量a去修改其值
#2是第2种情况:让指针本身成为一个常量,p2只能指向a所在的位置,不能指向其他位置。
同时C++禁止将const的地址赋给非const指针,所以下述情形是不允许的:
cons int b = 23 ;
int *p = &b ; //不允许
4、在函数中使用二维数组
如下示例所示:
int arr1[2][3] = {
{
1,2,3},{
23,25,15},{
35,89,45}};
int sum(int arr[][3],int size )
{
int total = 0;
for(int i = 0; i < size ; i ++ )
{
for(int j =