目录
  • 前言
  • 指针传递
    • 变量形式、函数原型及对应传参形式:
    • 解释:
  • 引用传递
    • 变量形式、函数原型及对于传参形式:
    • 解释:
  • 值传递
    • 变量形式、函数原型及对应传参形式:
    • 解释:
  • 总结:

    前言

    不论是哪种参数传递方式,都有形参和实参之分,都会在调用函数时进行一次复制,将实参的值赋予形参。对于值传递,实参形参概念较好区分,但对于地址传递,形参实参指向的地址相同,可能会产生操作的是同一变量的想法,实则不然。(这也是理解二级指针作用的核心知识点)

    指针传递

    变量形式、函数原型及对应传参形式:

    • 变量:int a = 0; int *b = 0;
    • 函数原型:void func(int *arg);
    • 传参形式:func(&a); func(b);

    解释:

    函数得参数类型是int指针类型,接受的参数的一个地址。因此,对于普通变量a,需要先用&符号取地址后传入,故传入&a。对于指针b,指针就是地址,因此直接传入b即可。

    #include <iostream>
    using namespace std;
    void exchange(int *a, int *b)
    {
    	int temp;
    	temp = *a;
    	*a = *b;
    	*b = temp;
    }
     
    int main()
    {
    	int x, y;
    	cin >> x >> y;
    	exchange(&x, &y);
    	cout << x << y;
    }

    引用传递

    最复杂的是引用传递。此次只讲解最基础简单的使用。

    变量形式、函数原型及对于传参形式:

    • 变量:int a = 0; int *b = 0;
    • 函数原型:void func(int &arg);
    • 传参形式:func(a); func(b);func(*b)

    解释:

    函数的参数类型是引用类型。对于变量a,直接传入a。对于指针b,可以选择传入地址b或者传入b指向的值*b。

    区别:待定

    引用的本质:待定

    #include <iostream>
    using namespace std;
    void exchange(int &a, int &b)
    {
    	int temp;
    	temp = a;
    	a = b;
    	b = temp;
    }
     
    int main()
    {
    	int x, y;
    	cin >> x >> y;
    	exchange(x, y);
    	cout << x << " " << y;
    }

    值传递

    变量形式、函数原型及对应传参形式:

    • 变量:int a = 0; int *b = 0;
    • 函数原型:void func(int arg);
    • 传参形式:func(a); func(*b);

    解释:

    函数的参数类型是int类型,接收的值是int型变量的值。因此,对于变量a,本身就是int型变量,故直接传入。对于指针变量b,是需要用*符号进行解引用获取指针指向的值,故传入*b。

    #include <iostream>
    using namespace std;
    void exchange(int a, int b)
    {
    	int temp;
    	temp = a;
    	a = b;
    	b = temp;
    }
     
    int main()
    {
    	int x, y;
    	cin >> x >> y;
    	exchange(x, y);
    	cout << x << " " << y;
    }

    总结:

    1.引用传递和值传递都是传地址,可理解为实参和形参的内存地址相同,在函数中的赋值操作在函数结束后仍会保留(只要被赋值的变量仍存在)。而值传递传入的是实参的值,调用函数时会进行拷贝操作将实参的值赋予形参,实参和形参的地址不同,因此在函数体内对形参的赋值操作不会改变实参的值。

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。