Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
VladislavTepes
78 / 78 / 5
Регистрация: 27.06.2012
Сообщений: 555
Записей в блоге: 1
#1

Передача массива в функцию по ссылке - C++

28.04.2013, 08:45. Просмотров 1269. Ответов 4
Метки нет (Все метки)

Здравствуйте. Есть функция:
C++
1
2
3
4
5
void f(int &a)
{
    int *p=&a;
    p[1]=1;
}
Но почему-то при попытке передать ей массив ругается дебаггер:
...|10|error: invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int*’|
Как с этим справиться?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2013, 08:45     Передача массива в функцию по ссылке
Посмотрите здесь:
C++ Передача двумерного массива в функцию по ссылке
Передача по ссылке двумерного динамического массива в функцию C++
C++ Передача указателя в функцию по ссылке
C++ Передача вектора в функцию по ссылке
Передача указателя в функцию по ссылке C++
Передача аргументов в функцию по ссылке и указателю C++
Передача в функцию по ссылке или указателю C++
Передача параметров в функцию по значению, по ссылке и по указателю C++
Передача параметров в функцию по значению, по ссылке или по указателю C++
Передача аргумента в функцию по значению, по ссылке, по указателю: в чём концептуальная разница? C++
C++ Передача массива по ссылке
Передача массива по ссылке C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,009
28.04.2013, 08:55     Передача массива в функцию по ссылке #2
В данном случае функция принимает ссылку на int, а вы хотите, чтобы была ссылка на int*:
C++
1
void f(int*& a);
И да - смысла в передаче массива по ссылке в данном случае нет, достаточно принимать int*.
VladislavTepes
78 / 78 / 5
Регистрация: 27.06.2012
Сообщений: 555
Записей в блоге: 1
28.04.2013, 08:57  [ТС]     Передача массива в функцию по ссылке #3
0x10, а когда массивы можно передавать по ссылке?
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,009
28.04.2013, 09:07     Передача массива в функцию по ссылке #4
Да можно-то когда захочется. Вопрос в другом - зачем оно нужно. Сходу и не придумаю. Т.е. понятно, что передавая по ссылке указатель, мы можем изменить его значение, но с тем же успехом можно и вернуть указатель из функции (если память выделена динамически). И вообще - всегда есть std::vector, проще использовать его.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
29.04.2013, 00:15     Передача массива в функцию по ссылке #5
Как вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
template<typename T, int N>
void foo(T (&arr)[N]){
    for(int i=0;i<N;++i)
        std::cout<<(arr[i]++)<<" ";
    std::cout<<std::endl;
}
 
 
int main(){
    const int size=10;
    int arr[size]={1,4,6,7,4,3,5,6,8,5};
    foo(arr);
    for(int i=0;i<size;++i)
        std::cout<<arr[i]<<" ";
    std::cout<<std::endl;
}
Yandex
Объявления
29.04.2013, 00:15     Передача массива в функцию по ссылке
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru