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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.65
LLlket
0 / 0 / 0
Регистрация: 18.05.2008
Сообщений: 7
#1

Передается только нулевой элемент массива - C++

25.05.2008, 22:39. Просмотров 2096. Ответов 16
Метки нет (Все метки)

вот есть у меня массив
int a[10];
и сушествует ф-ия
void F(int a[10]) ...
в ходе программы я передаю массив a в ф-ию F так
F(a)
в итоге передается только нулевой элемент массива а
че делать? ... что я делаю не так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2008, 22:39     Передается только нулевой элемент массива
Посмотрите здесь:
Передача массива через write: Передается только 8 байт C++
C++ Проверить, упорядочены ли элементы, заменить первый нулевой элемент и удалить указанный элемент из массива
Удалить первый нулевой элемент массива и добавить после каждого чётного элемента особый элемент C++
C++ Заменить каждый нулевой элемент массива А суммой элементов массива В
C++ Заполнение массива: нулевой элемент, размерность
C++ Удалить первый нулевой элемент массива
Бинарный поиск не находит нулевой элемент массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
25.05.2008, 22:46     Передается только нулевой элемент массива #2
таким вызовом ты передаешь в функцию только адрес первой счецки массива, в принципе можно прорваться и так таким образом
C++
1
2
3
4
5
6
7
8
9
10
void f(int p);
 
int main(){
    int a[10];
    f(a);
}
void f(int p){
    cout << &p;
    p++;//переход на следующий элемент массива
}
MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 91
25.05.2008, 23:08     Передается только нулевой элемент массива #3
в параметрах функции пишите int a[]
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
25.05.2008, 23:14     Передается только нулевой элемент массива #4
так тоже можно, но с указателями красивее
MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 91
25.05.2008, 23:23     Передается только нулевой элемент массива #5
'новечку'-то..
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
25.05.2008, 23:29     Передается только нулевой элемент массива #6
но извени, указатели потом очень пргодятся, так что пусть уже сейчас учиться
MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 91
26.05.2008, 00:49     Передается только нулевой элемент массива #7
когда учат указателям, сразу учат и динамическим массивам, ато и раньше, а тут статический массив пока
LLlket
0 / 0 / 0
Регистрация: 18.05.2008
Сообщений: 7
26.05.2008, 16:44  [ТС]     Передается только нулевой элемент массива #8
спс биг ... в итоге остановился на этом варианте
C++
1
2
3
4
5
6
7
8
int main(){
    int a[10];
    f(a);
}
void f(int p[]){
    for (int I = 0; I<=k; I++, p++){
        <обработка p[I]>;}
}
непонимаю как ... но работает
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
26.05.2008, 16:51     Передается только нулевой элемент массива #9
эммм....а зачем тогда инкрементить р? ведь тогда получается что i постоянно будет на нулевой позицции массива
MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 91
26.05.2008, 17:58     Передается только нулевой элемент массива #10
если писать 'void F(int a[10])' массив, указанный при вызове функции (F(a)) будет пытаться весь записаться в int a[10], то есть обращаясь к a[10], мы подразумеваем весь массив int a, но один элемент не может являться сразу целым массивом в данном случае, поэтому таким образом записывается только один элемент, вот и получается, что один элемент определен, а остальные неизвестно, с какого потолка упавшие. поэтому принимать нужно массив, а не элемент, [] - ставятся для уточнения элемента (int a = число а, int a[] = массив а). это не совсем корректный/правильный ответ, только для некоторого рождения понимания.
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
26.05.2008, 18:54     Передается только нулевой элемент массива #11
сорри но всё таки зачем инкрементить p. Все и так работать должно, ведь мы передали массив, обьявили i которая является индексом, а ведь p указатель на начало массива тоесть увеличивая p мы сдвигаем начало массива на 1 элемент, тоесть a[0] перестаёт существовать в массиве, a a[1] становиться а[0]. ведь так мы перескакиваем не на один элемент, а сразу на два, и притом теряем начало массива
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
26.05.2008, 21:29     Передается только нулевой элемент массива #12
Цитата Сообщение от MsDos Посмотреть сообщение
если писать 'void F(int a[10])' массив, указанный при вызове функции (F(a)) будет пытаться весь записаться в int a[10], то есть обращаясь к a[10], мы подразумеваем весь массив int a, но один элемент не может являться сразу целым массивом в данном случае, поэтому таким образом записывается только один элемент, вот и получается, что один элемент определен, а остальные неизвестно, с какого потолка упавшие. поэтому принимать нужно массив, а не элемент, [] - ставятся для уточнения элемента (int a = число а, int a[] = массив а). это не совсем корректный/правильный ответ, только для некоторого рождения понимания.
С точки зрения компилятора

Код
void F(int a[10])
эквивалентен

Код
void F(int a[])
поскольку в функцию передаётся не массив, а адрес первого элемента. И поэтому количество элементов в первом случае указывать бессмысленно.
Не правда ли так ещё понятнее ?

Добавлено через 4 минуты
Цитата Сообщение от Spo1ler Посмотреть сообщение
сорри но всё таки зачем инкрементить p...
Чтобы получить access violation
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
27.05.2008, 09:40     Передается только нулевой элемент массива #13
Цитата Сообщение от igor_nf Посмотреть сообщение


Чтобы получить access violation
эмм, и зачем мне acces violation я не думаю что это кому нить надо
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
27.05.2008, 11:32     Передается только нулевой элемент массива #14
Цитата Сообщение от Spo1ler Посмотреть сообщение
эмм, и зачем мне acces violation я не думаю что это кому нить надо
Ну автору наверное надо, раз он так пишет )
LLlket
0 / 0 / 0
Регистрация: 18.05.2008
Сообщений: 7
27.05.2008, 12:59  [ТС]     Передается только нулевой элемент массива #15
Цитата Сообщение от Spo1ler Посмотреть сообщение
эммм....а зачем тогда инкрементить р? ведь тогда получается что i постоянно будет на нулевой позицции массива
незнаю зачем ... но так 100% у меня работает нормально
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
27.05.2008, 13:19     Передается только нулевой элемент массива #16
скорее всего работает, но скачет через два элемента массива, и скорее всего на 5ом элементе индекс вылезет за пределы массива, а с С++ не отслеживается больше ли индекс заданого при обьявлении или нет. Так что если программа будет писать в элемент массива, то покоцает соседние данные и программа наверняка вылетит с ошибкой
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2008, 18:20     Передается только нулевой элемент массива
Еще ссылки по теме:
Заставить указатель указывать на нулевой элемент массива C++
C++ На С++ перенести в начало одномерного массива второй нулевой элемент
Вставить после каждого нечетного значения массива нулевой элемент C++
C++ Перед каждым положительным элементом массива вставить нулевой элемент
C++ Дана вещественная матрица размерности n * m. Найти общую сумму элементов только тех столбцов, которые имеют хотя бы один нулевой элемент

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

Или воспользуйтесь поиском по форуму:
LLlket
0 / 0 / 0
Регистрация: 18.05.2008
Сообщений: 7
27.05.2008, 18:20  [ТС]     Передается только нулевой элемент массива #17
Цитата Сообщение от Spo1ler Посмотреть сообщение
скорее всего работает, но скачет через два элемента массива, и скорее всего на 5ом элементе индекс вылезет за пределы массива, а с С++ не отслеживается больше ли индекс заданого при обьявлении или нет. Так что если программа будет писать в элемент массива, то покоцает соседние данные и программа наверняка вылетит с ошибкой
ага все увидел ... спс
Yandex
Объявления
27.05.2008, 18:20     Передается только нулевой элемент массива
Ответ Создать тему
Опции темы

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