数据结构day3
数据结构day3
函数
1.函数
在定义函数的时候需要给函数一个数据类型。
函数的返回类型和返回的值必须是统一的
执行到return的时候,函数必须结束,返回到上一级
一般函数都需要返回值,但是有一些不需要,比如说
void bigger (int a, int b){
if (a>b) cout<<a<<endl;
else cout<<b<<endl;
}
调用函数之前需要先申明才行
2.函数原型
#include <iostream>
using namespace std;
int bigger(int a,int b);
int main() {
int a,b;
cin>>a>>b;
cout<<bigger(a,b)<<endl;
}
int bigger(int a,int b){
if (a>b) return a;
else return b;
}
原型:我们先定义一个函数的原型,但是不给函数体,它只有函数名以及需要的参数等特征
甚至ab都可以不写,只写两个int
在编写函数较多的工程时。可以使用函数原型,不仅可以把作为入口的主函数写在最前面,
也更好的体现了【接口】这样一个特性,把函数的原型写在前面,调用的时候只看原型就能调用了
3.值传递
#include <iostream>
using namespace std;
void exchange(int, int);
int main() {
int a, b;
cin >> a >> b;
exchange(a, b);
cout << &a << endl;
}
void exchange(int a, int b) {
cout << &a << endl;
int c = a;
a = b;
b = c;
}
3 6
0x16d5f337c
0x16d5f339c
输入3和6 发现a和b的位置没有改变,因为函数传入了一个复制
方法1
要解决这个问题可以使用传递位置的方法。
#include <iostream>
using namespace std;
void exchange(int *, int *);
int main() {
int a, b;
cin >> a >> b;
exchange(&a, &b);
cout << &a << endl;
}
void exchange(int *a, int *b) {
cout << &a << endl;
int c = *a;
*a = *b;
*b = c;
cout << *a << endl;
cout << *b << endl;
}
c和c艹可以这么做
通过指针操作内存来交换他们的值
方法2
#include <iostream>
using namespace std;
void exchange(int &, int &);
int main() {
int a, b;
cin >> a >> b;
exchange(a, b);
cout << &a << endl;
}
void exchange(int &a, int &b) {
cout << &a << endl;
int c = a;
a = b;
b = c;
cout << a << " " << b << endl;
}
使用&符号,&符号可以保证在调用函数时对值的改变会保留回主函数,也就是他本质上传参数传的是值本身,而不是copy
4.数组作为函数参数
数组本身类型就是指针,所以如果在数组里面对数字的顺序进行操作,和前面的法1是一样的