我有一个功能
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
,因为不能修改字符串文字。static char str[] = "hello world";
. 这意味着每个人只共享一个字符串,所以任何修改都会影响到每个人。std::string str = "hello world";
. 这是最不容易出错的,因为它可以像简单值一样传递。