数据结构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是一样的

posted @ 2025-05-23 15:35  是我,米老鼠  阅读(7)  评论(0)    收藏  举报