我有一个功能
ValArgument(char* ptr){
char str[] = "hello world";
ptr = &str[0];
}
在这个函数中,我想初始化一个char数组并将它添加到char指针ptr中。我把这个函数称为:
char* ptr= NULL;
ValArgument(ptr);
返回的指针仍然具有NULL值。为什么?我希望指针指向char数组str []。
答案 0 :(得分:1)
返回的指针仍然具有NULL值。为什么呢?
因为你按值传递了指针。这意味着该函数被赋予一个单独的指针副本,它对指针所做的任何更改都不会影响调用者的副本。
您可以通过引用传递:
void ValArgument(char *& ptr)
// ^
或返回一个值:
char * ValArgument();
我希望指针指向char数组str []。
没有;一旦你解决了这个问题,它将指向当函数返回时被破坏的局部变量的不死壳。任何使用指针的尝试都会导致未定义的行为。
根据您需要对字符串执行的操作,您可能需要:
char const * str = "hello world";
。请注意,这应该是const
,因为无法修改字符串文字。static char str[] = "hello world";
。这意味着每个人只共享一个字符串,因此任何修改都会影响每个人。std::string str = "hello world";
。这是最不容易出错的,因为它可以像一个简单的值一样传递。