#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了,成功了!