函数知识点
(1)函数:打破程序执行顺序,遇到函数先执行函数体的内容,再返回执行主函数中的程序。
(2)静态变量(static Elemtype x=……):只有第一次定义的时候才初始化。在函数当中的静态变量,下一次函数调用时的静态变量是在之前函数调用的基础上变化的。
即函数当中的静态变量相当于一个只能由该函数使用的全局变量。
用静态变量不担心重名问题,全局变量定义太多要注意“重名问题”;而静态变量定义在不同函数中,不用担心“重名问题”。
静态变量与全局变量都是开在“堆”中,如果不赋初值,该变量初值为0;
void fanwen(){
static int x=0;
x++;
cout << "call:" << x << "times" << endl;
}
int main(){
fanwen();
fanwen();
fanwen();
return 0;
}
输出:
call: 1 times
call: 2 times
call: 3 times
(3)参数传递 :分为 非引用型变量 及 引用类型变量。
int max(int x,int y){
x=10,y=20; // 只在max()函数内部改变x,y的值,主函数中相应值不改变
if(x>y) return x;
else return y;
}
int max(int &x,int &y){
// 引用类型,会改变主函数中“x”, “y”的值
}
(4)多维数组做参数,只有一维的可以省略,其余的维度数不能省略。
因为在C++中是把多维数组当做一位数组存储。
void output(int m,int a[][2]){
// int a[][2] 可以;
// int a[1][] 不可以;
// int a[][2][2][3] 可以;
// int a[][][][][6] 不可以。
}
数组的传递相当于引用类型传递,函数内部数组改变,函数外部数组值也会跟着改变。
(5)有的函数参数赋值可以是默认值。
且只有后面连续的几个参数才能置默认值,不能在中间置默认值。也可用全部都设置默认值
int max(int a,int b=10){
// int a=5,int b 不可以;
// int a,int b=6,int c=10 可以;
// int a=5,intb=3,int c=10 可以
if(x>y) return x;
else return y;
}
int main(){
max(5); //没有给b传送值,则b使用默认值10
max(5,3); // 给b传送了值3,则b的值为3
}
(6)数组类型引用时,是引用指针,即只存储指针长度
void fan(int a[]){
cout << sizeof a << endl; // 比原数组长度小,因为只是引用了指针
}
int main(){
int a[10];
cout << sizeof a << endl;
}
(7)无返回值类型的函数,最后一个return可以省略;
但有返回值的,必须加上return,否则返回值随机,可能会出现随机错误(不知道哪里出错的错误)
void foo(){
puts("one");
return;
puts("two");
}
int main(){
foo;
}
输出:
one