C语言的,这个程序如何改啊?如何才能使CH1 CH2的值交换?这个为什么在帮解释下什么是实参,和形参。谢谢

#include<stdio.h>
int main()
{
void swap(char x,char y); //函数声明
char ch1='a',ch2='b';
printf("before:ch1=%c ch2=%c\n",ch1,ch2);
swap(ch1,ch2); //调用函数swap()
printf("after:ch1=%c ch2=%c\n",ch1,ch2);
return 0;
}
void swap(char x,char y) //定义函数swap()
{
char ch;
ch=x;
x=y;
y=ch;
}

void swap(char x,char y) //定义函数swap()
{
char ch;
ch=x;//x的值赋给ch
x=y;//y的值赋给x
y=ch;//通过中间量ch把x的值赋给y
}

以下是百度的!形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。 形参和实参的功能是作数据传送。发生函数调用时, 主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。

1.形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。因此,形参只有在函数内部有效。 函数调用结束返回主调函数后则不能再使用该形参变量。

2.实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。

3.实参和形参在数量上,类型上,顺序上应严格一致, 否则会发生“类型不匹配”的错误。

4.函数调用中发生的数据传送是单向的。 即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-13
形参和实参是完全不同的存储空间,形参发生改变,并不会影响实参,所以要想通过函数调用来改变实参的值,需要用地址来做实参,这样,形参也需要改成指针才行。
修改之后的如下:
#include<stdio.h>
int main()
{
void swap(char *x,char *y); //此处修改
char ch1='a',ch2='b';
printf("before:ch1=%c ch2=%c\n",ch1,ch2);
swap(&ch1,&ch2); //此处修改
printf("after:ch1=%c ch2=%c\n",ch1,ch2);
return 0;
}
void swap(char * x,char *y) //此处修改
{
char *ch; //函数体4行都修改
*ch=*x;
*x=*y;
*y=*ch;
}本回答被提问者采纳
第2个回答  2013-05-13
实参就是实际的数,比如你要计算身高,在主函数你声明一个变量
int main()
{
int length = 172;
int long = 50;//比如你又声明一个凳子的高度。
int result;

result = fun(length,long);

}
这个就叫实参,它就是你的数据。
型参就不同了,比如你想要写一个函数,来计算你站在凳子上有多高,你就可以这么写
int fun(int a,int b)
{
int c;
c = a+b;
return c;

}

看到没,不管你传什么进来,在函数里,我就把第一个参数叫做a,第二个参数叫做b,计算之后就返回结果。行参就是我函数要做的事情,和你这个数本身表示什么没有关系。

而且你如果要改变身高的值,你传个值进来是没有用的,你得传地址进来才行。因为你传值进来,只是让函数使用这个值,但并不改变它。
相似回答