大家帮作一下C语言的题~好像很简单,但不会啊~

来源:百度知道 编辑:UC知道 时间:2024/07/02 12:12:27
#include"stdio.h"
void sub1(char a,char b)
{char c;c=a;a=b;b=c}
void sub2(char *a,char b)
{char c;c=*a;*a=b;b=c}
void main()
{
char a,b;
a='A';b='B';
sub2(&a,b);
printf("%c%c\n",a,b);
a='A';b='B';
sub1(a,b);
printf("%c%c\n",a,b);
}
答案: BB
AA
为什么啊? sub1()不是互换函数么?
啊呀~由于疏忽问题答案弄错了,是bb ab

你搞错了吧!答案是:
BB
AB
(main()中a,b根本没变。你上机运行一下就知道了)
{char c;c=a;a=b;b=c} --->{char c;c=a;a=b;b=c;} 少分号
{char c;c=*a;*a=b;b=c} --->{char c;c=*a;*a=b;b=c;} 少分号
函数调用如果用的不是指针,那么就是单向传递,即a,b只能传递到sub1()中,sub1()执行后的值不能带回到main()中,要能带回到main()中最有效地方法是用指针或者定义全局变量,比如像你的sub2(),用&a传递。下面的sub1()是交换a,b的值。你应该好好看看谭浩强的<<c程序设计>>中指针一章。
#include"stdio.h"
void sub1(char *a,char *b) /*注意这里*/
{char c;c=*a;*a=*b;*b=c;} /*注意这里*/
void sub2(char *a,char b)
{char c;c=*a;*a=b;b=c;}
int main()
{
char a,b;
a='A';b='B';
sub2(&a,b);
printf("%c%c\n",a,b);
a='A';b='B';
sub1(&a,&b); /*注意这里*/
printf("%c%c\n",a,b);
system("pause");
return 0;
}

不是很清楚

这就要由C语言函数传值的特点说起了。调用函数时,传递的是实参的副本,也就是说,把实参的值拷贝一份,然后传递给形参。sub1()确实是互换了a和b的值,但是在函数中操作的只是形参a和b,而a和b是实参的拷贝,互换后对实参是没有影响的。形象点说,一个瓶子A(实参),他的复制品为瓶子B(形