|
发表于 2021-2-15 18:55:18
|
显示全部楼层
本帖最后由 一叶枫残 于 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了,这个是可以实现的,因为地址值不能改变,但是其解引用后的值可以改变 |
|