函数调用可以分为传值调用和传址调用
举个例子
#define _CRT_SECURE_NO_WARNINGS 1;
#include<stdio.h>
void Swap(int x, int y)
{
int tmp = 0;
tmp = x;
x = y;
y = tmp;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
printf("交换前a=%d,b=%d",a,b);
Swap(a,b);//自定义一个函数,并调用
printf("交换后a=%d,b=%d", a, b);
return 0;
}
这里即为传值调用,但是a,b,的值不会被交换。
原因如下:
1.这里的x,y为形式参数,在被调用前不会分配具体存储地址,只有在调用时形参才会拥有临时地址,调用完后会销毁。
2.这里的a,b为实参,实际我们输入的具体数值。在上面程序上,我们是对形参x,y进行了修改。
3.形参是实参的临时拷贝,对形参的修改不会影响到实参,及对x,y的修改不会影响我们a,b的值,所以a,b不会交换。
修改:
要实现对a,b进行交换,这里需要采用传址调用。
说明:
使用传址调用时,传给x,y的是我们a,b的地址,函数就可以通过寻址的方式去交换我们的a,b;具体如下
#define _CRT_SECURE_NO_WARNINGS 1; #include<stdio.h> void Swap(int *pa, int *pb) { int tmp = 0; tmp = *pa; *pa = *pb; *pb = tmp; } int main() { int a = 0; int b = 0; scanf("%d %d", &a, &b); printf("交换前a=%d,b=%d",a,b); Swap(&a,&b);//自定义一个函数,并调用 printf("交换后a=%d,b=%d", a, b); return 0; }
本篇文章到这里就结束了,制作不易,有收获的小伙伴也可以动动小手点点赞呐,你的点赞就是对我写出更多文章的动力!愿大家学习无忧,前程似锦!