欢迎访问宙启技术站
智能推送

函数中的参数类型及其用法

发布时间:2023-06-11 13:56:47

函数是程序中最基本的组成部分之一,函数有一些特殊的字符,能够帮助在将函数参数传递给函数时正确使用它们。函数参数类型是指函数定义时参数所声明的类型。这篇文章将讨论函数中的参数类型及其用法。

1. 值传递

在C++中,当函数使用独立的变量来传递数据时,只有该变量的值被传递到子程序中,在执行期间没有其他的依赖关系,这被称为值传递。值传递是参数传递机制的一种,它将实参的值传递给形参。在函数体内,形参用于存储实参的值,函数执行结束后它们被释放。这意味着,如果修改了形参的值,实参的值不会改变。

example:

#include <iostream>
using namespace std;

// 带有两个参数的函数
void swap(int x, int y)
{
   int temp;
   temp = x; /* 保存 x 的值 */
   x = y;    /* 把 y 赋值给 x */
   y = temp; /* 把 x 赋值给 y */

   return;
}

int main ()
{
   // 局部变量声明
   int a = 100;
   int b = 200;

   cout << "交换前,a 的值:" << a << endl;
   cout << "交换前,b 的值:" << b << endl;

   // 调用函数来交换值
   swap(a, b);

   cout << "交换后,a 的值:" << a << endl;
   cout << "交换后,b 的值:" << b << endl;

   return 0;
}

输出:

交换前,a 的值:100
交换前,b 的值:200
交换后,a 的值:100
交换后,b 的值:200

在此示例中,函数swap()通过值传递调用时,交换了变量a和b的值,函数内进行的操作不会影响函数外的变量。这是因为,在函数中声明的参数是传递给函数的副本,所有的操作都是在副本上执行的。

2. 引用传递

引用传递也被称为地址传递。函数传递参数的引用就是传递参数的地址。

example:

#include <iostream>
using namespace std;

// 函数声明
void swap(int& x, int& y);

int main ()
{
   // 局部变量声明
   int a = 100;
   int b = 200;

   cout << "交换前,a 的值:" << a << endl;
   cout << "交换前,b 的值:" << b << endl;

   // 调用函数来交换值
   swap(a, b);

   cout << "交换后,a 的值:" << a << endl;
   cout << "交换后,b 的值:" << b << endl;

   return 0;
}

// 函数定义
void swap(int& x, int& y)
{
   int temp;
   temp = x; /* 保存地址 x 的值 */
   x = y;    /* 把 y 赋值给 x */
   y = temp; /* 把 x 赋值给 y */

   return;
}

输出:

交换前,a 的值:100
交换前,b 的值:200
交换后,a 的值:200
交换后,b 的值:100

在上面的示例中,函数swap()通过引用传递调用时,交换了变量a和b的值。引用传递中,传递的是地址,因此在函数内中进行的操作将影响函数外的变量。这是因为,在函数中声明的参数是实参的地址,因此对形参的修改将传递到实参。

3. 指针传递

指针传递与引用传递类似,也是传递参数的地址。指针传递的方法比引用传递更灵活,因为指针可以指向任何类型的数据,而引用只能指向由它自己定义的类型。

example:

#include <iostream>
using namespace std;

// 函数声明
void swap(int *x, int *y);

int main ()
{
   // 局部变量声明
   int a = 100;
   int b = 200;

   cout << "交换前,a 的值:" << a << endl;
   cout << "交换前,b 的值:" << b << endl;

   // 调用函数来交换值
   swap(&a, &b);

   cout << "交换后,a 的值:" << a << endl;
   cout << "交换后,b 的值:" << b << endl;

   return 0;
}

// 函数定义
void swap(int *x, int *y)
{
   int temp;
   temp = *x;    /* 保存地址 x 的值 */
   *x = *y;      /* 把 y 赋值给 x */
   *y = temp;    /* 把 x 赋值给 y */

   return;
}

输出:

交换前,a 的值:100
交换前,b 的值:200
交换后,a 的值:200
交换后,b 的值:100

上面的示例中func()函数具有两个指向int类型变量的指针参数,在函数内部对变量进行交换,从而使变量得到互换。

在此示例中,函数swap()通过指针传递调用时,交换了变量a和b的值,函数内进行的操作将影响函数外的变量。这是因为,在函数中声明的参数是实参的地址,因此在函数中对指针的修改将影响实参。

总结:

值传递:

- 仅把实参的值传入到函数中,在执行期间是独立的,

- 如果在函数中对形参做修改,实参不受影响。

引用传参:

- 将实参的地址传入到函数中,在执行期间是共享的,有别名的作用。

- 如果在函数中对形参做修改,则实参也会被修改。

指针传递:

- 将实参的地址传入到函数中,在执行期间是共享的,有别名的作用。

- 函数中对指针所指内存存储单元的操作改变了该内存单元的内容,

- 同时实参的值也改变了。