Как передать массив в функцию по ссылке? - PullRequest
1 голос
/ 11 января 2012

Я смотрю, как передать строку / массив в функцию, я пытался передать по значению, но это не сработало, я посмотрел онлайн и видел по ссылке, но это не похоже работать либо.

Кто-нибудь может помочь?

Ответы [ 3 ]

3 голосов
/ 11 января 2012

Вы объявляете функцию, которая принимает массив из 10 дюймов по ссылке следующим образом:

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

Вы называете это так

int arr[10];
f(arr);

Вы можете шаблонизировать свою функцию

template<class T, int N>
void f(T (&arr)[N]);
0 голосов
/ 11 января 2012

Если вы используете недавний компилятор, такой как недавние gcc и visual studio (которые предоставляют контейнеры C ++ 11), вы можете использовать вместо необработанного массива std :: array и прояснить ситуацию при чтении.

Вот ответ Армена Цируняна с std :: array:

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 );
0 голосов
/ 11 января 2012

Если вы используете массивы переменного размера, вы должны использовать что-то вроде этого:

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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...