在C ++中传递数组引用

时间:2013-04-10 10:06:42

标签: c++ arrays function reference

我是C ++的新手并且一直遇到很多sytax ..我已经能够在一段时间内找到一个具体的答案了。我试图运行这段代码:

void test(char &testChar){
    char B[3] = {"BB"};
    testChar = B;
}

int main(int argc, const char * argv[])
{
    char A[3] = {"AB"};
    test(A);
    std::cout << A;

    return 0;
}

我想将变量A传递给函数test并让该函数将A的内容替换为局部变量B的内容,然后打印出来出。该怎么做?

4 个答案:

答案 0 :(得分:1)

对数组的引用应该是这个

void test(char (&testChar)[3]){
 // code
}

但是在你的测试函数中testChar = B;表达式是错误的。你需要explicitly string copy(第二个引用在C ++中没有变化,而不是像指针一样),你可能想要阅读:C++ Reference, change the refered variable

编辑:正如@ChristianSjöstedt所评论的那样。

Python是“动态类型语言”,其中变量的类型和值可以更改,而在C ++中,您可以声明变量的类型,它不会更改。

 i = 10         # reference to int 
 i = "name"     # reference to str

这可以在Python中实现,但不能在C ++(和C)中实现

C / C ++是静态语言,意思是“静态类型语言”。例如,变量的类型不能在编译时静态更改和定义。

int i = 10;
int中的

i可以是char。

Dynamic type languages versus static type languages

答案 1 :(得分:1)

  

“在C ++中传递数组引用”

假设您要将对数组的引用传递给函数,并将该数组的元素设置为存储在另一个数组中的元素,则可以使用std::copy,因为数组不可分配。最好使用模板函数来处理数组的大小:

template <size_t N>
test( char (&testChar)[N] )
{
  char B[N] = {"BB"};
  stc::copy(B, B+N, testChar);
}

但我建议你使用std::array,这是可复制的和可分配的:

template <size_t N>
test(std::array<char,N>& testarray; )
{
  std::array<char, N> B = {"BB"};
  teasArray = B;
}

答案 2 :(得分:0)

对于固定大小的数组使用std::array,对于动态(可变长度)数组使用std::vector

答案 3 :(得分:0)

这是您可能正在寻找的代码

#include <string.h>

void test(char *testChar){
    char B[3] = {"BB"};
    strcpy(testChar, B);
}

int main(int argc, const char * argv[])
{
    char A[3] = {"AB"};
    test(A);
    std::cout << A;

    return 0;
}

但是有很多原因导致像这样的代码是个坏主意。如果你想进行字符串操作,那么你应该从std::string类开始,而不是陷入C ++中数组和指针的可怕混乱。