2012-01-10 107 views
1

我正在寻找如何将一个字符串/数组传递给一个函数,我试图通过价值传递,但它似乎并没有工作,我看网上看到的参考,但似乎并不工作。如何通过引用将数组传递给函数?

谁能帮助?

+0

可能你可能展示的例如,即时通讯相当新的C + +它有助于看到实践中的代码,如果它不是太麻烦?谢谢 – nullVoid 2012-01-10 23:14:38

+0

简单:'void f(std :: array &par)'为一个数组(或者对于动态数组使用'std :: vector '),'void f(std :: string&par)'为一个字符串。但为什么不显示一些关于你想要做什么的代码? – Grizzly 2012-01-10 23:15:20

回答

3

您声明函数,通过引用,采用10个整数数组是这样的:

void f(int (&arr)[10]); 

你这样称呼它

int arr[10]; 
f(arr); 

您可以模板化的功能

template<class T, int N> 
void f(T (&arr)[N]); 
+0

我传递的字符串是从文件读入的,所以它没有静态的元素大小,无论如何我可以解决这个问题?谢谢 – nullVoid 2012-01-10 23:08:35

+1

@ user1141945:不,没有。 C++中的数组类型必须在编译时指定其大小。动态“数组”实际上是指针,而不是数组。 – 2012-01-10 23:14:55

+0

不是数组通过引用传递吗? 'void f(int(&arr)[10]);'和'void f(int arr [10]);'? – 2012-01-11 01:31:43

0

如果你正在使用可变大小的数组,你应该使用类似这样的东西:

void someFunc(char* szString, int cbChars) 
{ 
    for (int nChar == 0; nChar < cbChars; nChar++) 
    { // Do something with the char array 
     szString[nChar] = 'A'; // Convert string to "AAAAAA..." 
    { 
} 

void callerFunc() 
{ 
    char szString[255]; 
    // read file... 
    // put file contents in szString 
    // and call the above function passing the string 'by reference' 
    someFunc(szString, 255); 
} 

也就是说,只传递一个指向数组的指针(它必须是相同的类型)和它的大小(这样你就知道在哪里停止并避免异常)。

您可以为任何数据类型的任何阵列做同样的,有指针上一个很好的教程:http://www.cplusplus.com/doc/tutorial/pointers/

0

如果你使用的是最新的编译器像最近的海湾合作委员会和Visual Studio(提供C++ 11个容器),你可以用一个std :: array来代替原始数组,并且在阅读时更加清楚。

这里是阿尔钦Tsirunyan答案与标准::数组:

void f(std::array<int,10> & arr); 

你这样称呼它

std::array<int,10> arr; 
f(arr); 

您可以模板化的功能

template<class T, int N> 
void f(std::array<T,N> & arr); 
相关问题