C语言函数参数与变量→本地变量

为什么我调用函数swap后输出结果和没调用的是一样的?teacher在这一点上没讲清楚,希望能给个详细的解释
还有(怎么区分中文的括号和英文的,你们都是怎么一眼看出来的😂😂)

img

img

这么理解,主函数main()里的变量 a b, 和 swap() 函数里的 a b, 它们是四个变量,虽然同名,但属于不同的函数。就像有两个家庭,两家都各有二个小孩,而且四个小孩名字两两都叫 a b,在main() 家对 a b 干什么,和在swap()家叫它们家的小孩 a b 干了什么,虽然两家有联系,但两家小孩各干各的相互独立。所以,变量虽然同名,但它们所属函数不同,作用域也就不同,它们之间是独立的,系统就是靠这个把它们区分开的。如果是地址,那就是只有一家main()家有二个小孩 a b,把main()家的地址给了swap(),swap()就可以通过地址很容易找到main()家的小孩 a b 了。

值参是实现不了外部传递变量值的修改的
需要改为指针参数

void swap(int *x,int *y)
{
    int t = *x;
    *x = *y;
    *y = t;
}

main中写成 swap(&a,&b);
原因是函数参数是在函数内部定义的局部变量,是对传入变量的复制品。所以函数内部的x和y,与函数调用传递的a和b实际是两个变量了。修改函数内的x,y,与a,b毫无关系

你可以百度一下 函数按值传参,按地址传参,引用传参的几个知识点,然后对比理解一下。
这里的主要关键点是,函数的按值传参,其实传递的是重新拷贝了一个对象作为函数参数去处理,所以原数据没有变化。

语言里的对象涉及一个对象,以及对象的地址, 你如果传参是指针或者地址,修改的是这个对象对应的地址中的值,那就能起到改变原值的作用。
另外,新增一个引用的概念,传值时不再是拷贝,而是直接用原值,所以同样引用也能达到效果,你可以试试这几个

我好像明白大家的意思了,我现在还没学到指针可能以后就恍然大悟了。但请问这种传参的意义是什么?他并没有改变输出结果只是swap函数里面走了一遍程序