Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2012, 20:11   #1
David Villa
Пользователь
 
Аватар для David Villa
 
Регистрация: 24.12.2011
Сообщений: 54
По умолчанию массив +1

Здравствуйте. Нашел рекурсивную функцию (здесь приведена не полностью):

void PrintAllCombinations(const int array[], size_t N, vector<int> &v)
{
...
PrintAllCombinations(array+1, N-1, v);
...
PrintAllCombinations(array+1, N-1, v);
...
}

Скажите пожалуйста, что делает операция array+1? что при операции +1 происходит с массивом?
David Villa вне форума Ответить с цитированием
Старый 15.05.2012, 20:31   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

указатель на массив начинает указывать на след элемент.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.05.2012, 20:33   #3
David Villa
Пользователь
 
Аватар для David Villa
 
Регистрация: 24.12.2011
Сообщений: 54
По умолчанию

это не *(array+1) ли перемещает указатель на массив на следующий элемент?
David Villa вне форума Ответить с цитированием
Старый 15.05.2012, 20:34   #4
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Массив это указатель. Следовательно происходит увеличение указателя.
*(array+1) - тут увеличение адреса и разыменование.
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 15.05.2012, 20:36   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
это не *(array+1) ли перемещает указатель на массив на следующий элемент?
тут два действия.
первое смещение указателя, второе его разименование.
итог берется следующий элемент по указателю(второй если так проще)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.05.2012, 20:54   #6
David Villa
Пользователь
 
Аватар для David Villa
 
Регистрация: 24.12.2011
Сообщений: 54
По умолчанию

А как в таком случае переместить указатель в контейнере vector?
То есть мне в исходной функции надо вместо массива const int array[] использовать vector<my_class>. Как заменить array+1 аналогичной операцией для vector?
David Villa вне форума Ответить с цитированием
Старый 15.05.2012, 20:59   #7
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2David Villa
использовать итераторы. для вектора можно и без них, но с итераторами тип контейнера будет неважен
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 15.05.2012 в 21:02.
pproger вне форума Ответить с цитированием
Старый 15.05.2012, 21:05   #8
David Villa
Пользователь
 
Аватар для David Villa
 
Регистрация: 24.12.2011
Сообщений: 54
По умолчанию

А можно подробнее насчет итераторов? И как можно обойтись без них в данном случае?
David Villa вне форума Ответить с цитированием
Старый 15.05.2012, 21:09   #9
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

David Villa никак. Итераторы как раз и используются для перебора контейнеров.
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 15.05.2012, 21:10   #10
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2David Villa
Цитата:
А можно подробнее насчет итераторов?
инфы по ним и так полно, в гугл

Цитата:
И как можно обойтись без них в данном случае?
Код:
vector<int> arr, v;
...
PrintAllCombinations(&arr[0], arr.size(), v);
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С# задан массив 5х5. сформировать массивы А и В. в массив А поместить элементы с четными индексами, в массив В с нечетны Koksa Помощь студентам 0 10.10.2011 11:26
Запись координат в массив в реал тайм, Как записать координаты в массив Dark19 Visual C++ 2 21.06.2011 18:45
Из массив А получить массив В, удвоив все нечётные элементы удвоены ( на Pascal) KARTER Помощь студентам 1 18.06.2011 19:58
Массив - Нужно написать массив и распечатать на экран с конца в начало(язык С++) econ Помощь студентам 1 29.05.2011 22:02