C++ 函数(一)------函数的基础知识

C++的函数基础

以前,我有个朋友认为,学习C++,只要把指针,类,结构体等基础的,再结合自己的聪明才智,就可以结合实际工程的代码看懂,然后慢慢开始学会代码了。

然而,事实上并不是这样,因为C++中还有好多细节需要知道,特别是与函数相关的。
第一:函数与数组的关系和使用;
第二:函数与二维数组的关系和调用,更高维;
第三:函数和字符串的关系和调用;
第四:函数与结构体的关系和调用;
第五:函数与string对象的关系和调用;
第六:函数和array对象的关系和调用;
第七:函数指针;

关于函数的定义,其实很简单,就如下格式:

void Fun_Name(paramaterList)
{
//函数体,你所要实现的功能
return;
}

从上述代码可以看出,里面还有一个return
这是因为函数还存在两种情况,即有返回值的函数和无返回值的函数:

1. 有返回值函数和无返回值函数

无返回值的函数也被称为void函数,其书写个数如上述代码所示。
无返回值的函数往往是实现一些具体的功能,如打印和显示已经计算完成的数据数值等。

有返回值的函数会返回一个具体的结果,例如作为实际工程中某个变量的右值。
如下代码所示:

#include <iostream>
using namespace std;
int add(int,int);//函数原型
int main()
{
int a = 10;
int c;
int b;
b = add(8,9);//作为右值
c = a *b;
cout << c << endl;
return ;
}
int add(int x, int y)//书写一个简单的求和函数
{
int m = x + y;
return m;
}

2. 函数原型和函数调用

首先给出一个简单的代码,然后根据该代码解释函数原型以及函数原型的语法和功能作用

#include <iostream>
//首先声明函数原型,在函数原型中,可以定义函数的变量类型和变量名,也可以之定义变量类型,不定义变量名
void cheers(int);
double cube(double x);
int main()
{
using namespace std;
cheers(5);
cout<<"输入一个数字:";
double side;
cin >> side;
double volume = cube(side);//调用返回值
cout << "一个边长为" << side << "的立方体的体积是:";
cout << volume <<endl;
cheers(cube(2));
return 0;

}
//写函数体
void cheers(int n)
{
using namespace std;
for (int i= 0 ;i < n; i++)
	cout <<"万岁!"
	cout << endl;
	return 0;
}
double cube(double x)
{
return x*x*x;
}

2.1 为什么需要函数原型

原型描述了函数到编译器的接口,也就是说,他将函数返回值的类型(如果有返回值)以及参数的类型和数量告诉编译器。例如:
double volume = cube(side);

首先,原型告诉编译器,cube()有一个double类型的参数。如果程序没有提供这样的参数,原型将让编译器能够捕获这种错误。
齐次,cube()函数完成计算后,将把返回值放置在指定的位置(可能是CPU寄存器,也可能是内存中)。

重要的一点是,C++允许将一个程序放在读个文件中并单独编译这些文件。然后再将他们组合起来。在这种情况下,编译器在变异main()函数时,可能无权访问函数代码。如果函数位于库中,情况也将如此。

避免使用函数原型的唯一方法是,在首次使用函数之前就定义它,但这并不总是可行的。

2.2 原型的语法

在前面也说过,定义函数原型,必须在原型函数头中定义变量的类型(int double等等),同时也可以提供变量名,当然,不给出变量名也不会错。

例如上述代码的两个原型

void cheers(int);
double cube(double x);

3. 函数参数和按值传递

C++通常是按值传递参数,这就意味着将数值参数传递给函数,而后后者将被赋值给一个新的变量。例如:上述代码中,包含下面的函数调用:

double volume = cube(side);

其中,side是一个变量,在前面的运行程序中,其值为5。cube()的函数头如下:

double cube(double x);

被调用时,该函数将创建一个新的名为x的double变量,并将其初始化为5。这样,cube()执行的操作不会影响main()中的数据,因为cube()使用的是side的副本,而不是原来的数据。

在函数中声明的变量(包括参数)是该函数私有的。在函数被调用时,计算机将为这些变量分配内存;在函数结束时,计算机将释放这些变量使用的内存。这样的变量成为局部变量,因为他们被限制在函数中。

当然,一个函数不可能只有一个参数,写一个函数,往往会需要同时输入多个参数。

当然,当一个函数中存在多个参数的时候,也需要规范化在函数头中使用多参数的形式。

我们知道,当我们在函数中定义变量时,我们可以在函数中这样定义变量:

int main()
{
int a,b;
}

然而,如果在函数投中存在多个参数时,如果我们使用这种形式来定义则是错误的,,例如:

void add(int a,int b)
{
return a+b;
}

上述是正确的定义方法。
如果我们使用下面的方法,则是错误的:

void add(int a,b)
{
return a+b;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值