b84408190 发表于 2016-12-11 21:04:32

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

本帖最后由 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.

GavinR 发表于 2016-12-11 21:49:47

函数void copy_string(char *a,char *b)中传入的是a和b两个字符串的地址的值,而不是真正的指针变量,改成void copy_string(char **a,char **b)的话应该就正常了

b84408190 发表于 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的地址又变回去了,所以才输出没变化。

四十二 发表于 2016-12-12 01:19:55

被调用函数的内部的参数在被调用函数外不会被改变。

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

简单来说就是你可以试试用return的方式返回一个b。

fc1735 发表于 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);
}

b84408190 发表于 2016-12-12 08:55:12

fc1735 发表于 2016-12-12 07:14
不解释了,不懂再问吧
只做最小的修改而已,编译时警告会很多

cannot convert from 'char ** ' to 'int'。类型不一样不能赋值。

fc1735 发表于 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**

b84408190 发表于 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.
页: [1]
查看完整版本: 引用函数调换指针型字符串*a -- *b。