c语言|C语言-形参改变实参的原理

c语言|C语言-形参改变实参的原理


①原理
利用指针通过形参改变实参 ,
输入指针类型的形参x和y , 改变形参公式中指针所指的值*x和*y , 从而达成指针(地址)到值(变量)之间转换 。
重要环节都在定义函数中完成 , 调用函数只需确保实参为改变值的地址或指针即可 。

②定式
定义函数:fun(int*xint*y)
定义函数公式:*x , *y
int*是类型 , 实质是fun(xy) , 只不过x和y是指针类型变量 , 即形参必须是指针类型变量 。
由此可知
形参与形参公式的
搭配1
形参:int*xint*y(xy)
公式:*x*y
搭配2
形参:int*&xint*&y(&x&y)
公式:*&x*&y(xy)

③反例
#include< stdio.h>
【c语言|C语言-形参改变实参的原理】void fun(int *aint*b)
{int*t;
t=a;a=b;b=t;
/*定义函数表示交换 , 但并不具备改变实参的功能 。
因为搭配是形参a、b和形参公式a、b即输入地址改变地址 , 并不改变地址中的值 。
应该改为t=*a;*a=*b;*b=t*/
main()
{int x=1y=2*p=&x*q=&y;
fun(pq);printf(\"%d%d\"*p*q);
/*fun函数不具备改变实参功能 ,
输入p、q是指向x、y的指针交换p、q不影响*p和*q , 即结果还是1、2 。 */
fun(&x&y);printf(\"%d%d\\"*p*q);
/*fun函数不具备改变实参功能 ,
输入&x、&y是x、y的地址交换&x、&y不影响*p和*q , 即结果还是1、2 。 */