C语言 编写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串

#include<stdio.h>
#include<string.h>
void daoxu(char x[],int n)
{
char s;
int k;
for(k=0;k<n/2;k++)
{
s=x[k];x[k]=x[n-k-1];x[n-k-1]=s;
}
}
#define MA 100
main()
{
char a[MA];
int m;
scanf("%s",a);
printf("%s\n",a);
m=strlen(a);
daoxu(a,m);
printf("%s\n",a);
}
前面的函数明明是void,没有返回值,但为什么会起作用

这个和返回值没有关系的呀,返回值和参数是两个概念的。

参数是调用者传递给被调用者的一些信息,可以是一个或者多个,也可以没有。
而返回值是被调用者给调用者的信息,可以是一个,或者没有,不能是多个。

void daoxu(char x[],int n),这样子的写法,main函数传递给daoxu函数的是数组a和a的长度m,daoxu函数里面对数组a的更改一样会反馈到main函数里面,和daoxu函数有没有返回值完全没关系的追问

上面daoxu(char x[],int n)是字符型,可是输入数字也成立,这是为什么?

还有下面这个函数有什么问题?求解


 

 
追答

数字也可以使用字符类型来表示,使用的是其ASCII码。

fanxu函数的返回值是char类型,但是return的是一个数组str1。

所以返回值只是str1的地址的低8位。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-09
因为在传递参数的时候有两种方法,传值调用和传址调用,一般简单数据类型如int,float,double
等都是直接传值调用的,所以传入参数,原来的变量不会改变,但是数组类型的变量,他的值指的是该数组的首地址,首地址是不能够随意修改的,因此它将会视为传址调用,即在该数组的地址上直接改变里面的值,因此第一个函数就起作用了
第2个回答  2014-12-09

void  main()
 {
   char a[MA];
   int m;
   scanf("%s",a);
   printf("%s\n",a);
   m=strlen(a);
   daoxu(a,m);
   printf("%s\n",a);
 }


第3个回答  2014-12-09
数组作参数时,进行的是传址操作。
相似回答