初始化char指针

时间:2013-02-04 09:36:07

标签: 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 []。

1 个答案:

答案 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";。这是最不容易出错的,因为它可以像一个简单的值一样传递。