#include <stdio.h>
void trans(char *s)
{
s="12";
}
int main(int argc,char *argv[])
{
char *s="Hello,world!";
trans(s);
puts(s);
return 0;
}
输出结果不是12,很奇怪是不是,但是的确是我们的错误,如果我们这样改就对了:
#include <stdio.h>
void trans(char *s)
{
strcpy(s,"12");
/* 没有重新定义指针值,而是直接写入指针指向的内存区域 */
}
int main(int argc,char *argv[])
{
char s[]="Hello,world!";
/*
gcc 还在这里和我叫嚣,尽管是c程序,不带“const”关键字的,可是用
char s*="Hello,world!";
在编译时仍将这段内存定义为只读内存。
*/
trans(s);
puts(s);
return 0;
}
在main函数中
trans(s);
该语句将s传递给trans函数:
void trans(char *s)
这里s是“局部变量”,这就相当于:
void trans()
{
char *s="Hello,world!";
s="12";
}
在函数退出后,trans()中s被自动删除,main()函数中的s未被改变,所以我们应该用双指针:
#include <stdio.h>
void trans(char **s)
{
*s="12";
}
int main(int argc,char *argv[])
{
char *s="Hello,world!";
trans(&s);
puts(s);
return 0;
}
输出结果成了12了,成功了!