函数基础
函数定义
函数定义包含以下几个部分:返回类型、函数名字、形参列表和函数体。
int fact(int val)
{
}
列举一个简单的空函数,fact是函数名,fact前面的int是返回类型,val是形参,val前的int是接受的实参类型,花括号中的是函数体。
形参列表可以是空的,但是不能被省略,如果是省略形参可以用void或者直接为空
int fact(void)
{
}
或者
int fact()
{
}
多个形参可以使用逗号隔开,每个形参前都必须标有类型,任意两个形参不能同名。
实参是形参的初始值,与形参一一对应,无论是类型还是数量都必须对应。
6.3 用户输入一个数,计算这个数的阶乘
#include<iostream>
#include<string>
using namespace std;
int fact(int a);
int main()
{
int i;
cin>>i;
int j=fact(i);
cout<<"j"<<"的阶乘为"<<j<<endl;
}
int fact(int a)
{
int ret=1;
while(a>0)
{
ret*=a--;
}
return ret;
}
局部对象
每一个对象都有生命周期,定义在函数体外的变量,存在于整个程序执行的过程中,在函数开始时被创建,函数结束时消失。每个变量的生命周期的长短取决于它们的定义方式。对于普通局部变量对象来说,当函数路径经过定义语句时创建,当到达定义语句所在块末尾时销毁。某些时候需要局部变量的生命周期贯穿始末的时候需要使用static将普通的局部变量,变成局部静态变量。
6.6、6.7编写一个函数,使用到形参、局部变量和局部静态变量,函数的内容是第一次返回0,之后每一次返回变量加一
#include<iostream>
#include<string>
using namespace std;
int add()
{
static int a=1;
int b=1;
a=a+1;
b=b+1;
cout<<"a"<<a<<" ";
cout<<"b"<<b<<" ";
return 0;
}
main()
{
int b,i;
for(i=0;i<10;i++)
{
cout<<"这是第"<<i<<"次调用的结果"<<" ";
add();
cout<<endl;
}
}
结果如图
函数声明与分离式编译
函数只能定义一次,但是可以声明很多次。函数的声明和定义几乎一样,只是函数声明没有实体,用一个封号代替就可以了,也可以不写形参的名字。一般把函数声明放在头文件中。
6.8、6.9 编写一个项目 fact.cc,factmain.cc和fact.h
fact.h
#ifndef CHAPTER_H_INCLUDE