-1

我有一个功能

ValArgument(char* ptr){
   char str[] = "hello world";
   ptr = &str[0];
}

在这个函数中,我想初始化一个 char 数组并将其添加到 char 指针 ptr 中。我这样调用函数:

char* ptr= NULL;
ValArgument(ptr);

返回的指针仍然具有 NULL 值。为什么?我预计指针将指向 char 数组 str[]。

4

1 回答 1

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";. 这是最不容易出错的,因为它可以像简单值一样传递。
于 2013-02-04T10:49:15.860 回答