Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 初始化字符指针_C++_Function_Pointers_Char - Fatal编程技术网

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

我自己解决了这个问题,将指针作为ValArgument(&ptr)传递;但是现在我想我有一个问题,str[]中的值可能会在我离开函数后被删除。那么我该如何正确地做到这一点呢。如果你自己解决了这个问题,要么写下你自己的答案,要么删除这个问题。也就是说,如果其他人的现有答案中有一个与您的解决方案基本相同,那么我认为接受该答案是一种很好的形式。2.如果你在代码中遇到了一个新问题,请写一个新的问题,你给了它一个温柔的关怀。你使用C还是C++?在这个项目中,我使用C++ +ELSMU:检查答案。如果我在函数中创建char const *pTr=“hello World”,那么行为是什么?当我从函数返回时它是未定义的吗?@elsmu:定义得很好。字符串文字(
“hello world”
)在整个程序中持续存在,因此在函数返回后指向它的指针仍然有效。