引用调用

简介: 引用调用

通过引用传递方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。


传递指针可以让多个函数访问指针所引用的对象,而不用把对象声明为全局可访问。

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


现在,通过引用传值来调用函数 swap()

#include <stdio.h>
/* 函数声明 */
void swap(int *x, int *y);
int main ()
{
   /* 局部变量定义 */
   int a = 100;
   int b = 200;
   printf("交换前,a 的值: %d\n", a );
   printf("交换前,b 的值: %d\n", b );
   /* 调用函数来交换值
    * &a 表示指向 a 的指针,即变量 a 的地址
    * &b 表示指向 b 的指针,即变量 b 的地址
   */
   swap(&a, &b);
   printf("交换后,a 的值: %d\n", a );
   printf("交换后,b 的值: %d\n", b );
   return 0;
}


当上面的代码被编译和执行时,它会产生下列结果:

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


上面的实例表明了,与传值调用不同,引用调用在函数内改变了 ab 的值,实际上也改变了函数外 ab 的值。

目录
相关文章
|
C++
C++中一个函数接收一个类对象时使用引用会怎样
其实传值时就相当于,使用类型对象B(实参)去给类型对象A(形参)初始化。是不是有点熟悉了? 没错就是拷贝构造函数做的事情。虽然AB类型不一致。但是创建B对象的类类型是创建A对象的类类型的派生类。 这种情况下并不会产生类型不匹配的错误。
52 0
|
6月前
|
编译器 C++
C++ 解引用与函数基础:内存地址、调用方法及声明
C++ 中的解引用允许通过指针访问变量值。使用 `*` 运算符可解引用指针并修改原始变量。注意确保指针有效且不为空,以防止程序崩溃。函数是封装代码的单元,用于执行特定任务。理解函数的声明、定义、参数和返回值是关键。函数重载允许同一名称但不同参数列表的函数存在。关注公众号 `Let us Coding` 获取更多内容。
174 1
|
6月前
函数参数传递_使用引用避免拷贝
函数参数传递_使用引用避免拷贝
28 0
我应该使用按值调用还是按引用调用?
我应该使用按值调用还是按引用调用?
对象的相等和引用相等的区别
对象的相等和引用相等的区别
方法引用符、引用类方法、引用对象的实例方法、引用类的实例方法及引用构造器
方法引用符、引用类方法、引用对象的实例方法、引用类的实例方法及引用构造器
91 0
|
C#
C#中方法函数的声明和调用
C#中方法函数的声明和调用
167 0
|
安全 编译器 数据安全/隐私保护
对象的动态创建和销毁以及对象的复制,赋值
🐰对象的动态创建和销毁 🐰对象的复制 🐰对象的赋值
|
Java 编译器
方法引用的那些事儿
一句话介绍: > **方法引用**(**_Method Reference_**)是在 Lambda 表达式的基础上引申出来的一个功能。 先不铺展概念,从一个示例开始说起。 # 一、小示例 ```java List list = Arrays.asList(1, 2, 3); list.forEach(num -> System.out.println(num));
449 0