正在初始化字符指针

Initializing char pointer

本文关键字:指针 字符 初始化      更新时间:2023-10-16

我有一个函数

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