鱼C论坛

 找回密码
 立即注册
查看: 1799|回复: 7

引用函数调换指针型字符串*a -- *b。

[复制链接]
发表于 2016-12-11 21:04:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 b84408190 于 2016-12-19 09:38 编辑

#include <stdio.h>
void main(void)
{
char copy_string(char *a, char *b);
char *a="i am a teather.";
char *b="you are student.";
b=a;
printf("%s\n%s\n",a,b);
}

结果为:i am a teather.
              i am a teather.

以上不用函数,可行。

以下用函数为啥就不行?求助。。。。
#include <stdio.h>
void main(void)
{
void copy_string(char *a, char *b);
char *a="i am a teather.";
char *b="you are student.";
copy_string(a,b);
printf("%s\n%s\n",a,b);
}

void copy_string(char *a,char *b)
{
b=a;
}

结果为:i am a teather.
             you are student.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-12-11 21:49:47 | 显示全部楼层
函数void copy_string(char *a,char *b)中传入的是a和b两个字符串的地址的值,而不是真正的指针变量,改成void copy_string(char **a,char **b)的话应该就正常了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-11 22:51:15 | 显示全部楼层
GavinR 发表于 2016-12-11 21:49
函数void copy_string(char *a,char *b)中传入的是a和b两个字符串的地址的值,而不是真正的指针变量,改成v ...

我确实想通过改变b的首地址达到一次性改变打出字符串。
通过调试发现a地址确实赋值给了b,但好像函数没发生作用,运行出了函数后b的地址又变回去了,所以才输出没变化。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-12 01:19:55 | 显示全部楼层
被调用函数的内部的参数在被调用函数外不会被改变。

这句话可能有点不太明确。

简单来说就是你可以试试用return的方式返回一个b。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-12 07:14:53 | 显示全部楼层
不解释了,不懂再问吧
只做最小的修改而已,编译时警告会很多
#include <stdio.h>

void copy_string(int *a,int *b)
{
        *b=*a;
}

void main(void)
{
        char *a="i am a teather.";
        char *b="you are student.";
        int c=&a,d=&b;
        copy_string(c,d);
        printf("%s\n%s\n",a,b);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-12 08:55:12 | 显示全部楼层
fc1735 发表于 2016-12-12 07:14
不解释了,不懂再问吧
只做最小的修改而已,编译时警告会很多

cannot convert from 'char ** ' to 'int'。类型不一样不能赋值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-12 09:03:54 | 显示全部楼层
本帖最后由 fc1735 于 2016-12-12 09:05 编辑
b84408190 发表于 2016-12-12 08:55
cannot convert from 'char ** ' to 'int'。类型不一样不能赋值。


.cpp改成.c
或把int 都替换成char**
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-19 09:36:13 | 显示全部楼层
已解

#include <stdio.h>
void main(void)
{
char * copy_string(char *a, char *b);
char *a="i am a teather.";
char *b="you are student.";
b=copy_string(a,b);
printf("%s\n%s\n",a,b);
}

  char * copy_string(char *a,char *b)
{
return a;
}

结果为:i am a teather.
              i am a teather.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 18:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表