c语言形参与实参的区别

img


为什么x1x2会改变呢它不是调用的实参不返回吗难道是因为全局变量的问题吗

形参就是函数参数,实参就是外部调用函数时传给函数的变量
用整型作为参数时,函数内部是无法修改外部传入实参的值的。可以改为指针类型
void sub(int * x,int * y)
{
int t = * x;
* x = * y;
* y = t;
}
调用的地方这么写:sub(&x3,&x4);

不是,因为这是值传递,值传递这里只影响当前函数下,而无法对主函数造成影响,如果有返回值的用return返回可以造成影响。
这种交换类的,我们通常使用指针的形式或者引用的形式来进行交换。
改正如下:

#include<stdio.h>
#include<string.h>
int x1=30,x2=40;
void sub(int *x,int *y);
int main()
{

    int x3=10,x4=20;
    sub(&x3,&x4);
    sub(&x2,&x1);
    printf("%d,%d,%d,%d",x1,x2,x3,x4);
}

void sub(int *x,int *y)
{
    int temp;
    temp = *x;
    *x = *y;
    *y = temp;
}

测试图:

img

希望对题主有所帮助,可以的话,帮忙点个采纳!