← 返回首页
C语言系列教程(二十一)
发表时间:2021-03-26 23:13:48
形参和实参

函数定义处的参数为形参,函数调用处的参数是实参。

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的内存地址。那么改变形参指向的内存的值就是改变实参的值。