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

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

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

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

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

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

Массив: передать динамический массив в функцию и записать в каждый элемент строку из файла C++
как передать в функцию двухмерный динамический массив по ссылке C++
Написать функцию принимающую массив и возвращающую указатель на динамический массив C++
Как правильно передать динамический массив в функцию, увеличивающую его размер, чтобы изменения сохранились C++
Как передать в функцию двумерный динамический массив? C++
Передать в функцию динамический массив C++
C++ Передать в функцию динамический двухмерный массив с динамическими размерами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
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
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
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
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
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
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
23.05.2009, 12:17     Передать динамический массив в функцию #9
Цитата Сообщение от toxxin Посмотреть сообщение
Т.е. если массив строк то будет выглядеть так:
void func(char *arg)
не, строка, то есть массив charов.
Monte-Cristo
2786 / 1372 / 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
4817 / 3237 / 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
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
23.05.2009, 12:25     Передать динамический массив в функцию #14
когда arg - это массив строк, он может быть массивом масивов, а может быть массивом указателей
char (*s)[длина массива]
char **s
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
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;
}
toxxin
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
23.05.2009, 12:44  [ТС]     Передать динамический массив в функцию #16
всем большое спасибо!!!
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
23.05.2009, 12:44     Передать динамический массив в функцию #17
вот ещё пример, это через void *
их удобно передавать и возвращать, так как по стандарту эти указатели гарантируют сохранность данных при передаче, и не нужно следить за типом, все преобразования проводятся после передачи или возврата, а не во время
Вложения
Тип файла: zip print_by_void.zip (512 байт, 33 просмотров)
Evg
Эксперт CАвтор FAQ
17266 / 5520 / 343
Регистрация: 30.03.2009
Сообщений: 15,028
Записей в блоге: 26
23.05.2009, 16:27     Передать динамический массив в функцию #18
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
void
my_func (char *arr[], int num)
{
  int i;
  for (i = 0; i < n; i++)
    printf ("arr[%d]=%s\n", num, arr[num]);
}
 
int
main (void)
{
  {
    char *a[3];
    a[0] = "abc";
    a[1] = "cde";
    a[2] = "1234";
    my_func (a, 3);
  }
 
  // Случай с той самой нарезкой командной строки на параметры
  {
    char *args[100]; // Работаем максимум с 100 параметрами
    char cmd[1000];
    char *p = &(cmd[0]);
 
    // В этом месте ты с сокета типа прочёл команду
    strcpy (cmd, "ls param1 param2 param3");
 
    // Здесь типа осуществил нарезку. Т.е. массив указателей будет смотреть
    // на начала аргументов в буффере, а на места пробелов мы влепим нули, чтобы
    // образовались подстроки
    args[0] = p;
    p[2] = 0;
    args[1] = p+3;
    p[9] = 0;
    args[2] = p+10;
    p[16] = 0;
    args[3] = p+17;
    // за последним параметром и так стоит ноль, можно его и не писать
 
    my_func (args, 4); // массив у нас на 100 жлементов, но сообщим что заполнено только 4
  }
}
Добавлено через 2 минуты 13 секунд
kazak, вариант с strtok ему не подойдёт. Ему нужно сразу иметь все слова в одном вызове, а не вызывать функцию на каждое слово
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2009, 22:45     Передать динамический массив в функцию
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
toxxin
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
23.05.2009, 22:45  [ТС]     Передать динамический массив в функцию #19
Спасибо большое
Yandex
Объявления
23.05.2009, 22:45     Передать динамический массив в функцию
Ответ Создать тему
Опции темы

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