函数定义处的参数为形参,函数调用处的参数是实参。
1.形参和实参
我们把函数定义处的参数称为形参,函数调用处的参数称为实参。
实例:
#include <stdio.h>
#include <stdlib.h>
//这里的x,y是形参
int add(int x,int y) {
return x+y;
}
int main() {
int x = 10;
int y = 7;
printf("%d",add(x,y));//这里的x,y是实参
return 0;
}
2.函数调用时参数传递
C语言函数调用的本质就是实参把值复制了一份给形参,但是这个值又分两种情况。一种是数值,一种是地址。
对于形参是基本数据类型时通常是值拷贝。那么形参的改变不影响实参。
实例:
#include <stdio.h>
#include <stdlib.h>
void swap(int x,int y){
int temp;
temp = x;
x = y;
y = temp;
printf("in swap function x=%d,y=%d\n",x,y);
}
int main() {
int x = 10;
int y = 7;
swap(x,y);
printf("x=%d,y=%d",x,y);
return 0;
}
运行结果:
in swap function x=7,y=10
x=10,y=7
可见形参的改变不影响实参。
对于形参是指针类型时,通常是地址拷贝,那么改变形参就是改变实参。 实例:
#include <stdio.h>
#include <stdlib.h>
void swap(int* x,int* y){
int temp;
temp = *x;
*x = *y;
*y = temp;
printf("in swap function x=%d,y=%d\n",x,y);
printf("in swap function *x=%d,*y=%d\n",*x,*y);
}
int main() {
int x = 10;
int y = 7;
swap(&x,&y);
printf("x=%d,y=%d",x,y);
return 0;
}
运行结果:
in swap function x=6487580,y=6487576
in swap function *x=7,*y=10
x=7,y=10
由于形参是指针类型,所以打印x和y的值时我们发现里面保存的是实参x和y的内存地址。那么改变形参指向的内存的值就是改变实参的值。