我有以下非常简单的程序.
int modify(char * v){
v = "123" ;
return 0;
}
int main (int argc, char** argv){
char *test = new char[10];
modify(test);
std::cout << test;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以打印出"123",但我故意以这种方式编写它来了解指针是如何工作的.但是,不打印"123".我应该如何正确传递指针?
你必须记住,在C++中,参数默认是按值传递的,这意味着在函数中你有副本.并且修改副本不会改变原始版本.
如果要将指针更改为指向其他内容,则需要通过引用传递它.但是,在这种情况下,它会导致其他问题,因为然后松开原始指针.
因此,解决方案是使用std::string
通过引用传递,或者使用strcpy
顶部副本到目标内存区域(但是如果使用strcpy
,则必须注意不要超出分配的内存).