回 帖 发 新 帖 刷新版面

主题:一个老是糊涂的指针问题

char* DoSomething()
{
    char str[16]="asdf";  
    return str;
}  
int main()
{

    char *str = new char[16];
    //str = *DoSomething();
    str = DoSomething();
    cout << str;
}

在编译上,它是不会报错的,但在结果上,它输出的是乱码。有没有那位大大好心和我详细解说下,在书上看了好多,可感觉越看越乱。

回复列表 (共13个回复)

11 楼

可以返回,但如果不能引用这个指针原来的内容要来何用呢?

12 楼


首先你这个可以是因为当函数返回被调用处时,会做一个复制,也就是将a复制了,用a'表示,待程序运行到下一行就被销毁,所以能用。

至于你的程序,用VC++6.0会有一个警告就是,函数返回的地址是暂时的,也就是会被自动释放,所以会有乱码。

13 楼

#include<string.h>
#include<iostream.h>
void DoSomething(char *str)
{
    char strcopy[16]="asdf";
    strcpy(str,strcopy);
    
}  
void main()
{

    char *str = new char[16];
    
    DoSomething(str);
    cout<<str;
}
函数返回str的地址值指向的内容在函数调用结束后被释放了。
试一下这个吧。

我来回复

您尚未登录,请登录后再回复。点此登录或注册