函数传值调用和传址调用有何区别?

更新于
2026-10-10 04:44:11
0阅读来源:SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计667个文字,预计阅读时间需要3分钟。

函数传值调用和传址调用有何区别?

1. 引用+例如,如果我们想创建一个函数exchange来交换两个变量的值,可以有如下代码:+

1.引子

如果我们想创建一个函数exchange来交换两个变量的值,则有以下代码:

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> void test_exchange(int x, int y) { int temp = 0; temp = x; x = y; y = temp; } int main() { int a = 10; int b = 20; test_exchange(a, b); printf("a=%d\nb=%d", a, b); return 0; }

如果我们此时运行代码,发现a=10,b=20。它们的值不变,我们的用上面的test_exchange函数并没有达到交换两个变量的目的。问题出现在哪里?

2.实际参数和形式参数

上文中实际参数为a,b

形式参数为x,y

函数传值调用和传址调用有何区别?

当我们调用函数时,实际参数a会把值传给x,但a和x存放在内存中的位置不同(函数在调用实际参数时会开辟一个新内存空间以创建一个形式参数来达到临时保存的目的)

test_exchange函数仅仅把新内存中的x和y交换了,但对原内存中的a和b不会有任何影响。

阅读全文

本文共计667个文字,预计阅读时间需要3分钟。

函数传值调用和传址调用有何区别?

1. 引用+例如,如果我们想创建一个函数exchange来交换两个变量的值,可以有如下代码:+

1.引子

如果我们想创建一个函数exchange来交换两个变量的值,则有以下代码:

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> void test_exchange(int x, int y) { int temp = 0; temp = x; x = y; y = temp; } int main() { int a = 10; int b = 20; test_exchange(a, b); printf("a=%d\nb=%d", a, b); return 0; }

如果我们此时运行代码,发现a=10,b=20。它们的值不变,我们的用上面的test_exchange函数并没有达到交换两个变量的目的。问题出现在哪里?

2.实际参数和形式参数

上文中实际参数为a,b

形式参数为x,y

函数传值调用和传址调用有何区别?

当我们调用函数时,实际参数a会把值传给x,但a和x存放在内存中的位置不同(函数在调用实际参数时会开辟一个新内存空间以创建一个形式参数来达到临时保存的目的)

test_exchange函数仅仅把新内存中的x和y交换了,但对原内存中的a和b不会有任何影响。

阅读全文