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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 5.00
toxxin
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
#1

Передать динамический массив в функцию - C++

23.05.2009, 11:14. Просмотров 5223. Ответов 18
Метки нет (Все метки)

Имеется динамический массив, который надо передать в функцию. Число элементов массива заранее не известно. Какие есть варианты на этот счет??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2009, 11:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передать динамический массив в функцию (C++):

Передать в функцию динамический массив - C++
void sort_vstavk(int* a, int size) { int i, j, te; for (i = 0; i < size; i++) { te = a; for (j =...

Как передать динамический массив в функцию? - C++
Помогите пожалуйста передать динамический массив в функцию. #include <iostream.h> #include <conio.h> #include <stdlib.h> ...

Массив: передать динамический массив в функцию и записать в каждый элемент строку из файла - C++
задача: передать динамический массив в функцию, и записать в каждый элемент строку из файла. количество строк известно вот что у меня...

Как передать в функцию двумерный динамический массив? - C++
#include <iostream> #include<time.h> #include<cstdlib> using namespace std; void zap(int array, int n) { ...

Как передать динамический массив из функции в другую функцию - C++
Здравствуйте.Не могу передать массив из функции в функцию сортировки. Подскажите как переделать программу : #include "stdafx.h" ...

Передать в функцию динамический двухмерный массив с динамическими размерами - C++
Как передать динамический двухмерный массив с динамическими размерами? #include <iostream> #include <stdlib.h> #include <time.h> ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
23.05.2009, 11:31 #2
Динамический массив из ниоткуда не береться, он в каком то месте программы объявляется и при его создании указывается размер - вот его и надо запомнить и передавать в функцию вместе с массивом.
BullDogoff
10 / 10 / 1
Регистрация: 16.05.2009
Сообщений: 30
23.05.2009, 11:36 #3
Если размер массива изменяется динамически, можно, например, при изменении дополнительно загонять в конец значение-признак конца массива, и потом в функции вычислять длину.
toxxin
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
23.05.2009, 11:58  [ТС] #4
Массив получается из строки. У меня есть функция func(arg[0], arg[1], и т.д.), где arg[] -собственно динамический массив. Как мне передать его в фукцию если я не знаю сколько элементов у этого массива??

Добавлено через 33 секунды
Приведите пример если можно.
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
23.05.2009, 12:01 #5
Если массив содержит строку то в конце должен содержаться нулевой элемент '\0', тогда делаешь обработку массива пока не встретися нулевой элемент.
toxxin
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
23.05.2009, 12:08  [ТС] #6
НЕее. Элементы массива - это слова полученные из строки(дроблением). Как мне вызвать функцию func(arg[0], arg[1] и т.д.)?? Как мне это конкретно записать??

Добавлено через 1 минуту 30 секунд
То что массив можно обработать и посчитать и записать признак конца массива это я понимаю(хотя бы в теории). Меня интересует синтаксис передачи динамического массива в функцию
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
23.05.2009, 12:11 #7
<Type1>Function(<Type2> *array);
toxxin
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
23.05.2009, 12:13  [ТС] #8
Воооо. Спасибо)))

Добавлено через 1 минуту 5 секунд
Т.е. если массив строк то будет выглядеть так:
void func(char *arg)
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
23.05.2009, 12:17 #9
Цитата Сообщение от toxxin Посмотреть сообщение
Т.е. если массив строк то будет выглядеть так:
void func(char *arg)
не, строка, то есть массив charов.
Monte-Cristo
2788 / 1374 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
23.05.2009, 12:18 #10
Цитата Сообщение от toxxin Посмотреть сообщение
void func(char *arg)
нет..это массив символов
toxxin
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
23.05.2009, 12:20  [ТС] #11
Ну тогда пример в студию... пожалуйста
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
23.05.2009, 12:20 #12
Цитата Сообщение от toxxin
Имеется динамический массив, который надо передать в функцию. Число элементов массива заранее не известно. Какие есть варианты на этот счет??
всегда передаётся только адрес первого элемента массива (даже если укажешь размер, он не будет передан, потому что в функцию пойдёт только копия адреса начала массива)

Код
    func(arg);
это &arg[0], дальше, внутри функции через этот адрес будет получаться доступ к любому элементу массива
если не контролировать длину, можно вылезти за край массива, в запрещённую память и получится segmentation fault (особенно когда в него пишешь)
так что, можно пометить конец массива в нём самом, или передать его размер рядом через sizeof
Код
    func(arg, sizeof arg / sizeof arg[0]);
передаст количество элементов в массиве (общее число байт, поделённое на число байт в одном элементе)
toxxin
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
23.05.2009, 12:24  [ТС] #13
У меня последний элемент массива равен "end"(прям слово)...

Добавлено через 34 секунды
Делалось специально. Как чувствовал не ладное))

Добавлено через 1 минуту 11 секунд
Спасибо. Сознание восприняло))
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
23.05.2009, 12:25 #14
когда arg - это массив строк, он может быть массивом масивов, а может быть массивом указателей
char (*s)[длина массива]
char **s
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
23.05.2009, 12:30 #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void PrintWord(char *);
 
void main();
{
   char arr[256], buf;
   cout << "Введите предложение: ";
   cin.getline(arr, 256);
   cout << "Отдельные слова предложеня: " << endl;
   buf = strtok(arr, " ");
   PrintWord(buf);
   while (buf != NULL)
   {
      strtok(NULL, " ");
      PrintWord(buf);
   }
}
 
void PrintWord(char *arg)
{
   while (*arg != '\0')
   {
      cout << *arg;
      arg++;
   }
   cout << endl;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2009, 12:30
Привет! Вот еще темы с ответами:

Как передать динамический массив в функцию, чтобы он изменился? - C++
Через указатель не изменяется:(

как передать в функцию двухмерный динамический массив по ссылке - C++
как передать в функцию двухмерный динамический массив по ссылке?

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

Не могу разобраться как передать корректно передать массив из функции в функцию - C++
//--------------------------------------------------------------------------- #pragma hdrstop ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.05.2009, 12:30
Ответ Создать тему
Опции темы

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