通过引用传递char数组

Nar*_*uto 6 c++ arrays pass-by-reference

我通过引用传递一个char数组但是当我从函数返回并打印数组时,它什么也没显示.我究竟做错了什么?

#include <iostream>

using namespace std;

void func(char []);
int main()
{
   char a[100];
   func(a);

   cout << a<<endl;
   return 0;
}

void func(char *array)
{
   array="Inserting data in array a";
   cout << array<<endl;
}
Run Code Online (Sandbox Code Playgroud)

问候

0x4*_*2D2 6

你可能做的是:

void func( char (& array)[10] ) {

}
Run Code Online (Sandbox Code Playgroud)

转换为:通过引用()传递[..]10([10])字符(char)的数组((& ..)).


Ben*_*ley 5

你没有通过引用传递数组(你也不应该,这对你没有好处).您正在将指针传递给其第一个元素.然后,您将该指针重新指定为指向函数内的其他内容.这对阵列没有影响.如果要更改数组的内容,则需要将数据复制到指针指向的位置.你可以使用strcpy或类似的:

strcpy(array, "Inserting data in array a");
Run Code Online (Sandbox Code Playgroud)

作为评论,但非常重要.我们不再需要在C++中处理这样的事情了.这就是你在C中做事的方式.这就是我们用C++做事的方式:

#include <string>
#include <iostream>

void func(std::string & str)
{
    str = "Inserting data into the string";
    std::cout << str << std::endl;
}

int main()
{
    std::string a;
    func(a);
    std::cout << a << std::endl;
}
Run Code Online (Sandbox Code Playgroud)


Kir*_*lev 5

您可以通过引用传递指针.为此,您需要以下语法:

void func(char *&array)
{
    // ....
}
Run Code Online (Sandbox Code Playgroud)

在函数内部,您将此参数用作简单指针.只有在修改后,这些更改才会在外部显示.

  • 这不适用于 `main` 将 `a` 的值传递给函数的方式:代码不会在编译时显示消息“无效初始化类型 'char*&amp;' 的非常量引用” 'char*'类型的临时值” (2认同)