函数的传值调用和传址调用,哪种方式更符合长尾词的使用习惯?

2026-04-12 01:031阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

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

函数的传值调用和传址调用,哪种方式更符合长尾词的使用习惯?

1. 引用+创建函数exchange来交换两个变量的值,代码如下:

pythondef exchange(a, b): temp=a a=b b=temp return a, b

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不会有任何影响。(尤其要注意函数的形式是void时,没有return任何数据,非常容易发生此类错误

3.传值调用和传址调用

函数的传值调用和传址调用,哪种方式更符合长尾词的使用习惯?

上述的test_exchange函数即为传值调用

如果想达到交换变量的目的我们需要用到传址调用,代码如下:

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> //int*表示传递给函数的参数类型是地址 void exchange(int* x, int* y) { int temp = 0; //*为解地址符,会根据地址寻找存储在里面的值 temp = *x; *x = *y; *y = temp; } int main() { int a = 10; int b = 20; exchange(&a, &b); //&为取地址符,为函数传递变量的地址 printf("a=%d\nb=%d", a, b); return 0; }

4.知识点补充

(1)实际参数和形式参数可以同名,上文中实际参数为a,b,那形式参数也可以设为为a,b。

原因:实际参数a,b为全局变量,形式参数a,b为函数内部的局部变量,函数在内部运行时会只读取它的局部变量

(2)&+参数形式的传参(仅限于c++)

&在此处不是解地址符,而是将形参的结果赋值给实参的操作符,可以改变实参本身的数值。

void test1(int a) { a++; } void test2(int& a) { a++; } int main() { int a = 1; test1(a); printf("%d", a); //结果为1,传值调用,实际参数不变 test2(a); printf("%d", a); //结果为2,实际参数改变 return 0; }

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

函数的传值调用和传址调用,哪种方式更符合长尾词的使用习惯?

1. 引用+创建函数exchange来交换两个变量的值,代码如下:

pythondef exchange(a, b): temp=a a=b b=temp return a, b

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不会有任何影响。(尤其要注意函数的形式是void时,没有return任何数据,非常容易发生此类错误

3.传值调用和传址调用

函数的传值调用和传址调用,哪种方式更符合长尾词的使用习惯?

上述的test_exchange函数即为传值调用

如果想达到交换变量的目的我们需要用到传址调用,代码如下:

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> //int*表示传递给函数的参数类型是地址 void exchange(int* x, int* y) { int temp = 0; //*为解地址符,会根据地址寻找存储在里面的值 temp = *x; *x = *y; *y = temp; } int main() { int a = 10; int b = 20; exchange(&a, &b); //&为取地址符,为函数传递变量的地址 printf("a=%d\nb=%d", a, b); return 0; }

4.知识点补充

(1)实际参数和形式参数可以同名,上文中实际参数为a,b,那形式参数也可以设为为a,b。

原因:实际参数a,b为全局变量,形式参数a,b为函数内部的局部变量,函数在内部运行时会只读取它的局部变量

(2)&+参数形式的传参(仅限于c++)

&在此处不是解地址符,而是将形参的结果赋值给实参的操作符,可以改变实参本身的数值。

void test1(int a) { a++; } void test2(int& a) { a++; } int main() { int a = 1; test1(a); printf("%d", a); //结果为1,传值调用,实际参数不变 test2(a); printf("%d", a); //结果为2,实际参数改变 return 0; }