C++ 函数
一、函数的定义与声明
1、








2、声明




可以看出自己定义的函数没有声明,开方函数没有声明


3、函数调用






4、参数传递方式




可以看到实参并没有发生变化。
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
void swap(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
}
int main()
{
int a=1,b=2;
cout<<"before:a="<<a<<" b="<<b<<endl;
swap(a,b);
cout<<"exchange:a="<<a<<" b="<<b<<endl;
}

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
int a=1,b=2;
cout<<"before:a="<<a<<" b="<<b<<endl;
swap(a,b);
cout<<"exchange:a="<<a<<" b="<<b<<endl;
}
void swap(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
}

有点疑惑,更改函数的位置后,定义的函数不用声明也能通过编译



#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
int a=1,b=2;
cout<<"before:a="<<a<<" b="<<b<<endl;
swap(a,b);
cout<<"exchange:a="<<a<<" b="<<b<<endl;
}
void swap(int &x,int &y)//引用,不预留位置,随着调用的变
{
int temp;
temp=x;
x=y;
y=temp;
}

5、为形参定义默认值


6、数组名做函数的参数



#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int fun(int b[],int m,int n)
{
int i,s=0;
for(i=m;i<m+n;i++)
s=s+b[i];
return s;
}
int main()
{
int x,a[]={0,1,2,3,4,5,6,7,8,9};
x=fun(a,0,10);//不能给a后加方括号
cout<<x<<endl;
x=fun(a,3,5);
cout<<x<<endl;
return 0;
}



#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
void tranmat(int a[][10],int n)
{
int t;
for(int i=0;i<n-1;i++)
{
for(int j=i;j<n;j++)
{
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
}
}
int main()
{
int x[10][10],n;
cout<<"输入n(n<10):";
cin>>n;
cout<<"输入"<<n<<"行"<<n<<"列元素:"<<endl;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>x[i][j];
}
}
tranmat(x,n);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout<<x[i][j]<<" ";
}
cout<<endl;
}
return 0;
}

可以看到直接将原来的数组改变了,并不会说生成一个新的数组。

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
struct Student// 定义结构体
{
int stno;
char name[20];
int age;
};
void Print(Student a)
{
cout<<a.stno<<endl;
cout<<a.name<<endl;
cout<<a.age<<endl;
}
int main()
{
Student stu={1001,"zhangsan",20};//注意结构体如何初始化
Print(stu);
return 0;
}

二、递归函数


#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int f(int n)
{
if (n==0)
return 1;
else
return n*f(n-1);
}
int main()
{
int n=3,m;
m=f(3);
cout<<m<<endl;
}


#include<iostream>
#include<string>
using namespace std;
int s=0;//全局变量,次数
void move(char x,char y)//移动函数 ,没有返回值
{
cout<<x<<"---->"<<y<<endl;
s++;
}
void hanoi(int n,char a,char b,char c)
{
if(n==1)
move(a,c);
else
{
hanoi(n-1,a,c,b);
move(a,c);
hanoi(n-1,b,a,c);
}
}
int main()
{
int m;
cout<<"请输入盘子个数:";
cin>>m;
cout<<"过程如下:"<<endl;
hanoi(m,'A','B','C');
cout<<"总共移动了"<<s<<"次";
return 0;
}

一定要注意提炼模型,移动柱子来表示移动的过程。再有注意全局变量的定义。
三、内联函数



四、函数重载



五、变量的作用域



注意理解:j是属于该函数中定义的值,而i 属于复合语句中的值,所以i的值发生了变化,而j的值没有发生变化。

i会在循环结束后自动释放,所以判断i<5,可能出错。




六、变量的存储类型









浙公网安备 33010602011771号