函数参数传递的三种方式
- 值传递
由于值传递是单向传递,传递过程中只是改变了形参的数值,并未改变实参的数值,因此并不会改变x和y原有的值。
void swap(int x, int y)
{
int temp = 0;
temp = x;
x = y;
y = temp;
}
- 指针传递
指针传递过程中,将参数的地址分别传递给了x和y,在函数体内部改变了x、y所在地址的值,即交换了数值。
void swap(int *x, int *y)
{
int temp = 0;
temp = *x;
*x = *y;
*y = temp;
}
- 引用传递
引用传递中,在调用swap(a, b);时函数会用a、b分别代替x、y,即x、y分别引用了a、b变量,这样函数体中实际参与运算的其实就是实参a、b本身,因此也能达到交换数值的目的。
注:严格来说,C语言中是没有引用传递,这是C++中语言特性,因此在.c文件中使用引用传递会导致程序编译出错。
void swap(int &x, int &y)
{
int temp = 0;
temp = x;
x = y;
y = temp;
}
本质上说,C 里面所有的函数参数传递,都是值传递。
指针传递之所以能改变传递参数变量的值,是因为 swap 函数交换的不是传递进来的指针本身,而是指针指向的值。
另外 函数也可以在函数中声明
实例1
#include <stdio.h>
int main(void)
{
int a = 0;
int b = 10;
void sum(int x, int y);
sum(a, b);
}
void sum(int x, int y)
{
printf("sum = %d\n", x + y);
}
实例2 demo.c文件代码如下
#include <stdio.h>
void sum(int x, int y)
{
printf("sum = %d\n", x + y);
}
main.c文件代码如下
#include <stdio.h>
int main(void)
{
int a = 0;
int b = 10;
extern void sum(int x, int y);
sum(a, b);
}
|