回 帖 发 新 帖 刷新版面

主题:C++ 这是编译器问题吗???

#include <string>
#include <iostream>

void New(string *s)
{
    s=new string("213");
}
int main()
{
    string *s=NULL;
    New(s);
    cout<<*s;
    return 0;
}

上面的代码会出错,这是编译器问题吗???
还是我的代码哪里有错了,谢谢.

回复列表 (共2个回复)

沙发

这不是编译器的问题。
通常,编译器不会出什么问题。应该多多怀疑自己的代码,而不是怀疑编译器出现问题了。(凡事也有例外,Visual C++ 6.0是相对较为容易出问题的,可以试试Visual C++ 9.0或者Visual C++ 10.0)

楼主应该记得C语言是“传值调用”,而C++默认也是这样做的。传值引用的特点就是拷贝,main函数中的s是拷贝了一份,再传到New函数中去的。因此,New函数中不管如何操作,main函数中的s始终不变。所以New(s);执行完以后,s的值仍然是NULL,接下来cout<<*s就会运行出错了。

修改:C++除了支持传值,还支持传引用。把
void New(string *s)
修改为
void New(string *&s)
即可。

这些是C++里面很基础的东西了,建议楼主先把自己的基础打好。而不是先就怀疑别人。

板凳

哦哦,谢谢.

我来回复

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