C++ 初始化字符指针
我有一个函数C++ 初始化字符指针,c++,function,pointers,char,C++,Function,Pointers,Char,我有一个函数 ValArgument(char* ptr){ char str[] = "hello world"; ptr = &str[0]; } 在这个函数中,我想初始化一个char数组并将其添加到char指针ptr中。我这样调用函数: char* ptr= NULL; ValArgument(ptr); 返回的指针的值仍然为NULL。为什么?我希望指针指向char数组str[] 返回的指针的值仍然为NULL。为什么? 因为您是按值传递指针的。这意味着函数将获得指针
ValArgument(char* ptr){
char str[] = "hello world";
ptr = &str[0];
}
在这个函数中,我想初始化一个char数组并将其添加到char指针ptr中。我这样调用函数:
char* ptr= NULL;
ValArgument(ptr);
返回的指针的值仍然为NULL。为什么?我希望指针指向char数组str[]
返回的指针的值仍然为NULL。为什么?
因为您是按值传递指针的。这意味着函数将获得指针的单独副本,它对指针所做的任何更改都不会影响调用方的副本
您可以通过引用传递:
void ValArgument(char *& ptr)
// ^
或返回一个值:
char * ValArgument();
我希望指针指向char数组str[]
没有;一旦解决了这个问题,它将指向在函数返回时被销毁的局部变量的不死外壳。任何使用指针的尝试都将导致未定义的行为
根据需要对字符串执行的操作,您可能需要:
- 指向字符串文本的指针,
char const*str=“hello world”代码>。请注意,这应该是
,因为不能修改字符串文本const
- 指向静态数组的指针,
staticcharstr[]=“helloworld”代码>。这意味着每个人只共享一个字符串,因此任何修改都会影响每个人
- 指向动态分配数组的指针。不要去那里
- 字符串对象,
std::string str=“hello world”代码>。这是最不容易出错的,因为它可以像一个简单的值一样传递
“hello world”
)在整个程序中持续存在,因此在函数返回后指向它的指针仍然有效。