本帖最后由 一叶枫残 于 2021-2-15 18:57 编辑
我知道你那个问题在哪了:
首先,传入的是一个指针(字符串名就是一个指针,储存的是地址值),因为函数是值传递,它给的是那个地址值,不是那个指针,你只能修改这个地址值的解引用也就是值,你在函数修改其地址值并不对main里面的s的地址值产生任何影响,看下面代码就清楚了#include <stdio.h>
#include <stdlib.h>
#define MAXS 20
void f( char *p );
void ReadString( char *s ); /* 由裁判实现,略去不表 */
int main()
{
char s[MAXS];
printf("主函数里:");
printf("开始时s的地址:%x\n",s);
printf("请输入字符串:");
gets(s);
f(s);
printf("主函数里:调用函数后s的地址:%x\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
void f( char *p )
{
printf("\n函数f里:\n开始时p的地址:%x\n",p);
int i = 0;
char *a;
printf("开始时a的地址:%x\n",a);
while (*p != '\0')
{
i ++;
p ++;
}
a = (char *)malloc(i);
printf("分配内存后时a的地址:%x\n",a);
int m = 0;
int t = 0;
p = p-i;
for (m = i-1;m >= 0; m--)
{
a[t] = p[m];
t ++;
}
a[t] ='\0';
p = a;
printf("结束后p的地址:%x\n",p);
printf("结束后a的地址:%x\n\n",a);
}
主函数里:开始时s的地址:62fe00
请输入字符串:abcd
函数f里:
开始时p的地址:62fe00
开始时a的地址:62fd70
分配内存后时a的地址:986ad0
结束后p的地址:986ad0
结束后a的地址:986ad0
主函数里:调用函数后s的地址:62fe00
你看地址都没有改变,怎么可能实现,还有的是,在PTA里没给出#include<stdlib.h>,意味着你不能使用malloc,一开始出发思路就错了,其实正确做法是调换值,例如字符串是abcd,a和d调换,b和c调换,就变成了dcba了,这个是可以实现的,因为地址值不能改变,但是其解引用后的值可以改变 |