С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

вот есть у меня массив
int a[10];
и сушествует ф-ия
void F(int a[10]) ...
в ходе программы я передаю массив a в ф-ию F так
F(a)
в итоге передается только нулевой элемент массива а
че делать? ... что я делаю не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2008, 22:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передается только нулевой элемент массива (C++):

Передача массива через write: Передается только 8 байт - C++
Добрый день. Помогите пожалуйста, не понимаю, как передать заполненный двумерный динамический массив через функцию write. Что бы я не писал...

Проверить, упорядочены ли элементы, заменить первый нулевой элемент и удалить указанный элемент из массива - C++
Найти произведение отрицательных элементов массива, следующих после первого положительного элемента. Если по какой-либо причине вычислить...

Удалить первый нулевой элемент массива и добавить после каждого чётного элемента особый элемент - C++
Здравствуйте! Имеется такая задача: 1) Сформировать одномерный массив целых чисел, используя датчик случайных чисел. 2) Распечатать...

Заменить каждый нулевой элемент массива А суммой элементов массива В - C++
Даны целочисленные массивы А и В. Заменить каждый нулевой элемент массива А суммой элементов массива В.

Заполнение массива: нулевой элемент, размерность - C++
Приветствую. Немного запутался с этими массивами, разъясните, пожалуйста, ситуацию. Код: void GradeBook::outputBarChart() { ...

Удалить первый нулевой элемент массива - C++
Здравствуйте.Объясните пожалуйста,как удалять элемент в массиве,если он к примеру, равен 0.То есть у меня есть одномерный массив: 1 2 3 0 4...

16
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++;//переход на следующий элемент массива
}
0
MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 96
25.05.2008, 23:08 #3
в параметрах функции пишите int a[]
0
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
25.05.2008, 23:14 #4
так тоже можно, но с указателями красивее
0
MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 96
25.05.2008, 23:23 #5
'новечку'-то..
0
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
25.05.2008, 23:29 #6
но извени, указатели потом очень пргодятся, так что пусть уже сейчас учиться
0
MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 96
26.05.2008, 00:49 #7
когда учат указателям, сразу учат и динамическим массивам, ато и раньше, а тут статический массив пока
0
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]>;}
}
непонимаю как ... но работает
0
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
26.05.2008, 16:51 #9
эммм....а зачем тогда инкрементить р? ведь тогда получается что i постоянно будет на нулевой позицции массива
0
MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 96
26.05.2008, 17:58 #10
если писать 'void F(int a[10])' массив, указанный при вызове функции (F(a)) будет пытаться весь записаться в int a[10], то есть обращаясь к a[10], мы подразумеваем весь массив int a, но один элемент не может являться сразу целым массивом в данном случае, поэтому таким образом записывается только один элемент, вот и получается, что один элемент определен, а остальные неизвестно, с какого потолка упавшие. поэтому принимать нужно массив, а не элемент, [] - ставятся для уточнения элемента (int a = число а, int a[] = массив а). это не совсем корректный/правильный ответ, только для некоторого рождения понимания.
0
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]. ведь так мы перескакиваем не на один элемент, а сразу на два, и притом теряем начало массива
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
0
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
27.05.2008, 09:40 #13
Цитата Сообщение от igor_nf Посмотреть сообщение


Чтобы получить access violation
эмм, и зачем мне acces violation я не думаю что это кому нить надо
0
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
27.05.2008, 11:32 #14
Цитата Сообщение от Spo1ler Посмотреть сообщение
эмм, и зачем мне acces violation я не думаю что это кому нить надо
Ну автору наверное надо, раз он так пишет )
0
LLlket
0 / 0 / 0
Регистрация: 18.05.2008
Сообщений: 7
27.05.2008, 12:59  [ТС] #15
Цитата Сообщение от Spo1ler Посмотреть сообщение
эммм....а зачем тогда инкрементить р? ведь тогда получается что i постоянно будет на нулевой позицции массива
незнаю зачем ... но так 100% у меня работает нормально
0
27.05.2008, 12:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2008, 12:59
Привет! Вот еще темы с ответами:

Заставить указатель указывать на нулевой элемент массива - C++
Вроде бы и простой вопрос для начинающих, но почему-то не могу найти на него ответ. Есть функция сортировки массива, алгоритм типа...

Бинарный поиск не находит нулевой элемент массива - C++
Мой бинарный поиск не находит нулевой элемент массива. Не получается исправить ошибку. Подскажите кто-нибудь пожалуйста. #include...

На С++ перенести в начало одномерного массива второй нулевой элемент - C++
Помогите написать программу которая переносит в начало одномерного массива второй нулевой элемент.

Вставить после каждого нечетного значения массива нулевой элемент - C++
3адан целочисленный массив размера N. Вставить после каждого нечетного значения нулевой элемент. Ребята, помогите :)


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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