重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
从main()函数入口
淄川ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!
首先:sub(10,5,a),相对应传到函数sub(int x,int y,int *z)
得x=10,y=5,指针z就是所求a的值,这样 a=-5;
其次:sub(7,a,b),将a=-5代入,等同于sub(7,-5,b),依上所得,
b=-12
最后:sub(a,b,c),将a=-5,b=-12代入,等同于sub(-5,-12,c),依上
所得,c=-7
这里你一定要理解是C语言函数调用时参数传递是按值传递的.用sub(x3,x4)来说明:x3,x4叫实参,也就是函数外面已经定义好的变量,x3=10,x4=20.而sub(int x,int y)中的x,y是形参,是当函数被调用时编译器在函数内部分配的局部变量,对函数外部而言是不可见的.sub调用一开始,编译器会把实参的值赋给形参,也就是x=x3和y=x4,赋值完成后的函数调用就和x3,x4没有任何关系了,x,y的任何操作都不会影响x3,x4的值.
然后再回答你上述两个问题:
1,sub的意图是想交换两个参数的值,x1是作为过渡变量.你可以想象成x,y是两个瓶子,要想交换两个瓶子里的水,就必须使用另外一个瓶子,暂时存放其中一个瓶子的水,x1就是这样一个瓶子.但是sub函数的写法是根本起不到交换的目的,原因就是上述解释的参数传递,x,y确定交换了,但与x3,x4没有关系,它们还是它们!
2,x1是全局变量,任何地方都是可见的,也就是可以修改的.所以sub(x3,x4);sub(x2,x1)唯一起的作用就是第一个参数将改变全局变量x1的值:第一次x3赋给x1变成10,第二次x2赋值x1变成40(这一次赋值才有真正效果),最终x1变成40,其它三个变量都没有改变!
实参的值传给了形参,形参可以看着是被调函数中的局部变量被调函数可有返回值也可以没有有返回值用return返回。例如int fun(int a,int b){ int c; c=a+b; return c;}主函数调用:int a,b,c;a=1,b=2;c=fun(a,b);没有返回值的函数通常形参都是指针变量,那样可以直接改变变量的值,例如fun(int *a){ *a=5;}主函数调用int b=1;fun(b);这里调用fun后,b的值就变为5了而如果你的函数是fun(int a)这样b的值是不会变化的,这要你去理解指针
故意构造这样一个函数 迷惑你
考察 对 static 型变量的理解 以及 两种参数传递方式的理解
分析:
sub(a,0) 传入数组名 a 和 0 给 s 和y
第一次调用sub函数 t为 3
y = s[t]; 就是 y = a[3] = 4
t-- t变为2
第二次调用
sub(a,1)
这时t是2
y = a[2] = 3
...
sub函数里没有 改变x,x一直是0
sub函数内 y是在变 但是 请注意 x 传给y是 值传递 ,y的改变不会导致x发生变化