C语言初学者简单问题12

来源:百度知道 编辑:UC知道 时间:2024/05/22 02:13:40
main()
{ int a=1,b=2;
printf("a=%d b=%d\n",a,b);
swap(a,b);
printf("把a值传递给了swap函数的a\n把b值传递给了swap函数的b\n”);
printf("a=%d b=%d\n",a,b);
}
swap(inta,intb)
{int temp;
temp=a;
a=b;
b=temp;
printf("a=%d b=%d\n",a,b);
}
程序的运行结果如下:
a=1 b=2
a=2 b=1把a值传递给了swap函数的a。
把b值传递给了swap函数的b.
a=1 b=2

问题是:1.a=2 b=1把a值传递给了swap函数的a\n把b值传递给了swap函数的b\n 这个..下面{}里面的每步给详细解释一下
2.第三步回归a=1 b=2时候这函数也循环?

这还是实参和形参的问题.上次我已经强调过实参只能单向传递给形参.
而形参不能把数值再传回实参.
简单一点就是说,第一句就不用说了,显示a,b数值.
第二句开始调用,在调用函数之内,形参的a,b数值交换.注意一点,swap(a,b)和主函数中的a,b是完全不同的,完全不相干,你可以将swap中的形参换成任何字母,
程序用a,b就是迷惑你.
第四句又回到了了主函数.主函数中的a,b不可能被调用函数改变,保持原样.
主函数中的参数叫实际参数.
调用函数中的,叫形式参数,
因为形式参数在调用函数时才临时分配空间,
调用结束空间释放.无法改变实参.

这应该是一个值传递的问题,当调用函数swap时,把实参a、b的值传递给型参a、b,函数中a和b的值相互交换,但并不影响实参a、b所指向的地址的值,所以第三步输出a和b的值不变。

其他的也不需解释了,其实你是没有搞懂函数,
函数只有一个返回值,所以你在调用了swap(a,b)之后,它是有一个返回值,而你并没有用它的还回值。你的第三个printf()涵数输出的当然是a=1 b=2了。

呵呵,没有什么行循环啊。