main()
{
char  *t="oooooop";
doit(t);//为什么t的返回值不变还是"oooooop";而不是ttttttttttttttttttttttttttt
delete [] t;
}void doit(char * u)
{
u="ttttttttttttttttttttttttttttt";
}

解决方案 »

  1.   

    main()
    {
    char *t = new char(100);
    lstrcpy(t, "oooooop");
    doit(t);
    delete[] t;
    }void doit(char * u)
    {
    lstrcpy(u, "ttttttttttttttttttttttttttttt");
    }
      

  2.   

    void doit(char * u)
    {
        strcpy(u,"ttttttttttttttttttttttttttttt");
    }
      

  3.   

    在C里面参数传递是按值传递,调用doit时,实参t和虚参u的值是一样的,为字符串"oooooop"的地址,当使用u="ttttttttttttttttttttttttttttt";是把
    "ttttttttttttttttttttttttttttt"的地址给了u,而t的值还没有变。
    所以要改变u指向的字符串区域的内容,而不是改变u的值。
      

  4.   

    可改为用引用:
    void doit(char &u)
    {
     }
      

  5.   

    main()
    {
    char  *t="oooooop";
    doit(t)
    }void doit(char* &u){         //注意这里
    u="ttttttttttttttttttttttttttttt";
    }使用引用,这样就可以实现你要的功能了
      

  6.   

    还有,程序中没有出现new,就不要使用delete.
      

  7.   

    main()
    {
    char  *t="oooooop";
    doit(&t);
    delete [] t;
    }void doit(char **u)
    {
     *u="ttttttttttttttttttttttttttttt";
    }