函数的声明和定义
在复杂的程序中,如果全部的代码都写在main函数中,main函数体将非常庞大臃肿。
把任务分工到其它的函数中,main函数只负责程序的核心流程,具体的任务由其它函数完成。
这种思想就是模块化编程。
声明和定义函数的语法:
返回值的数据类型 函数名(参数一的数据类型 参数一, 参数二的数据类型 参数二,……)
{
实现函数功能的代码。
return 返回值;
}
函数的声明:让编译器知道函数的存在,包括返回值的数据类型、函数名和参数列表。
函数的定义:函数的实现过程。
注意:
函数的声明和定义可以书写在一起,也可以分开,如果书写在一起,一般放在main函数的上面,如果分开,一般在main函数的上面声明,在main函数的下面定义。
如果函数的声明和定义分开书写,函数的声明后面一定要有分号,函数的定义后面一定不能写分号。
在同一个程序中,函数只需要声明和定义一次,也可以多次声明,但只能定义一次。
函数的声明必须和函数的定义一致(返回值的数据类型、函数名和参数列表),如果函数名和参数列表不同,表示它们不是同一个函数。
return语句返回值的数据类型必须与函数的声明一致。
在函数体中,return语句可以多次使用。
如果函数的重点是实现功能,不关心返回值,返回值的数据类型填void,return语句后面就空着。
函数可以没有任何参数。
函数名是标识符,必须满足标识符的命名规则。
在函数的声明和函数的定义中,参数命名可以不同,但是没必要这么书写。
示例:
#include <iostream> // 包含头文件。
using namespace std; // 指定缺省的命名空间。
// 写一个函数,给它两个整数,让它比较两个整数的大小,返回较大的那个整数。
int max(int a, int b); // 函数声明后面的分号不能少。
// 写一个函数,给它一个字符串,让它在控制台显示出来。
void print(string str);
// 写一个函数,在控制台输出九九乘法表。
void printmt();
int main()
{
}
int max(int a, int b) // 函数定义后面不能加分号。
{
if (a > b) return a;
return b;
}
void print(string str)
{
cout << str << endl;
return;
}
void printmt()
{
// 在控制台输出九九乘法表。
for (int ii = 1; ii <= 9; ii++)
{
for (int jj = 1; jj <= ii; jj++)
{
cout << ii << "*" << jj << "=" << ii * jj << " ";
}
cout << endl;
}
return;
}
函数的调用
语法:函数名(参数一,参数二,……)
注意:
声明函数的代码必须放在调用之前,定义函数的代码可以放在调用之后。
调用函数的时候,参数列表必须与函数的声明一致(参数的个数、书写的顺序和数据类型)。
不管在什么地方,都不能调用main函数,但是,在普通函数中,可以调用其它的普通函数。
调用函数的代码可以独占一条语句,也可以用于表达式(赋值运算、算术运算、关系运算、函数的参数)。
如果函数用于表达式中,返回值的数据类型要匹配(否则可能会被隐式转换或编译错误)。
如果函数有返回值,可以不关心它,忽略它。
示例:
#include <iostream> // 包含头文件。
using namespace std; // 指定缺省的命名空间。
// 写一个函数,给它两个整数,让它比较两个整数的大小,返回较大的那个整数。
int max(int a, int b); // 函数声明后面的分号不能少。
// 写一个函数,给它两个参数:no-超女编号,str-表白的内容。
void print(int no,string str);
// 写一个函数,在控制台输出九九乘法表。
void printmt();
int main()
{
cout << "max(5,8)=" << max(5,8) << endl;
print(8, "请借给我五分钱吧。");
printmt();
}
int max(int a, int b) // 函数定义后面不能加分号。
{
if (a > b) return a;
return b;
}
void print(int no, string str)
{
cout << "亲爱的"<<no<<"号:"<<str << endl;
return;
}
void printmt()
{
// 在控制台输出九九乘法表。
for (int ii = 1; ii <= 9; ii++)
{
for (int jj = 1; jj <= ii; jj++)
{
cout << ii << "*" << jj << "=" << ii * jj << " ";
}
cout << endl;
}
return;
}