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

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

Войти
Регистрация
Восстановить пароль
 
Morg4n
0 / 0 / 0
Регистрация: 25.04.2010
Сообщений: 5
#1

Передача Указателя На Двумерный Массив В Функцию - C++

10.04.2013, 08:21. Просмотров 431. Ответов 6
Метки нет (Все метки)

Как изменить код, чтобы массив объявлялся в main() и передавался в input_strings().
Код:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define MAXLENGTH 129
#define MAXSIZE 20
 
char arr_str[MAXSIZE][MAXLENGTH];
 
int input_strings(){
    int i,n;
    for(i = 0;i<MAXSIZE;i++){
        printf ("line %-2d: ", i);
        gets(arr_str[i]);
        if(!arr_str[i]) break; // выход по пустой строке
        n++; //кол-во строк
    }  
    return n;
}
 
int main(void) {
 
    int n;
    n = input_strings();
}
Голову уже сломал =\
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2013, 08:21     Передача Указателя На Двумерный Массив В Функцию
Посмотрите здесь:

Передача указателя на двумерный массив в функцию - C++
Здравствуйте. Сильно не ругайтесь, в c++ недавно. Потихоньку подошел к указателям. Могу передать указатель на одномерный массив, на...

Передача в функцию указателя на динамический массив - C++
Добрый день. Не могу понять одну вещь. Вот такой вот код работает. Создается массив из 10 элементов и указатель на него передается в...

Передача указателя на массив структур в функцию - C++
Здрвствуйте! Не могу сообразить почему вылетает segmentation fault в функции, inputDate при количестве элементов в массиве &gt;2 Если есть...

Передача указателя на массив структур в функцию и далее - C++
Не могу получить доступ к члеман массива структур, есть доступ только к первому члену массива. struct ABC { double a= 0; ...

Передача указателя на массив тип complex в функцию - C++
Всем дорого времени суток! Возникла проблема. Подскажите, пожалуйста. Как &quot;правильно&quot; сделать: Есть массив complex&lt;double&gt; A; Нужно...

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

Передача в функцию указателя на указатель - C++
Добавление нового элемента в начало списка: void Add_Beg(List **u, Data &amp;x) // Почему в 1 аргументе функции указатель на указатель? { ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6289 / 5892 / 1910
Регистрация: 18.12.2011
Сообщений: 15,131
Завершенные тесты: 1
10.04.2013, 08:55     Передача Указателя На Двумерный Массив В Функцию #2
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
int input_strings(char** arr_str)
{
    int i,n;
    for(i = 0;i<MAXSIZE;i++)
    {
        printf ("line %-2d: ", i);
        if(gets(arr_str[i]))break; // выход по пустой строке
        n++; //кол-во строк
    }  
    return n;
}
 
int main(void) 
{
   char** ps=new char*[MAXSIZE];
    for(int i = 0;i<MAXSIZE;i++)
             ps[i]=new char[MAXLENGTH];
 
    int n;
    n = input_strings(ps);
    ....
    for(int i = 0;i<MAXSIZE;i++)
        delete[] ps[i];
    delete[] ps;
}
anmartex
...
1701 / 1194 / 495
Регистрация: 12.02.2013
Сообщений: 1,978
10.04.2013, 08:56     Передача Указателя На Двумерный Массив В Функцию #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cstdio>
 
#define MAXLENGTH 129
#define MAXSIZE 20
 
int input_strings(char arr_str[MAXSIZE][MAXLENGTH]){
    int i,n = 0;
    for(i = 0;i<MAXSIZE;i++){
        printf ("line %-2d: ", i);
        gets(arr_str[i]);
        if(!arr_str[i]) break; // выход по пустой строке
        n++; //кол-во строк
    }
    return n;
}
 
int main(void) {
    char arr_str[MAXSIZE][MAXLENGTH];
    int n = input_strings(arr_str);
 
    return 0;
}
dstat
36 / 38 / 1
Регистрация: 01.06.2011
Сообщений: 238
10.04.2013, 09:02     Передача Указателя На Двумерный Массив В Функцию #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#define MAXLENGTH 129
#define MAXSIZE 20
 
 
 
int input_strings(char arr_str[][MAXLENGTH]){
    int i=0,n=0;
    for(i = 0;i<MAXSIZE;i++){
        printf ("line %-2d: ", i);
        gets(arr_str[i]);
        if(!arr_str[i]) break; // выход по пустой строке
        n++; //кол-во строк
    }  
    return n;
}
 
int main(void) {
 char arr_str[MAXSIZE][MAXLENGTH];
    int n=0;
    n = input_strings(arr_str);
}
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
10.04.2013, 09:08     Передача Указателя На Двумерный Массив В Функцию #5
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
44
45
46
47
48
49
50
51
52
53
54
55
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
int inputStrings(char **arrayOfStrings, int maxHeight, int maxWidth) {
  int i;
  for (i = 0; i < maxHeight; ++i) {
    printf("line %-2d: ", i);
    // Резервируется 2 символа -- 1 под перенос строки, 1 под '\0'
    fgets(arrayOfStrings[i], maxWidth - 2, stdin);
    if (!arrayOfStrings[i] || arrayOfStrings[i][0] == '\n') {
      break;
    }
    // удаление переноса строки
    arrayOfStrings[i][strlen(arrayOfStrings[i]) - 1] = '\0';
  }
  return i;
}
 
char **createArrayOfStrings(int maxHeight, int maxWidth) {
  char **arrayOfStrings = (char**)malloc(sizeof(char*) * maxHeight);
  int i;
  for (i = 0; i < maxHeight; ++i) {
    arrayOfStrings[i] = (char*)malloc(sizeof(char) * maxWidth);
  }
  return arrayOfStrings;
}
 
void freeArrayOfStrings(char **arrayOfStrings, int maxHeight,
  int maxWidth) {
  int i;
  for (i = 0; i < maxHeight; ++i) {
    free(arrayOfStrings[i]);
  }
  free(arrayOfStrings);
}
 
int main(int argc, char *argv[]) {
  int maxHeight = 20;
  int maxLength = 129;
  
  char **arrayOfStrings = createArrayOfStrings(maxHeight, maxLength);
  
  int actualNumberOfLines = inputStrings(arrayOfStrings, maxHeight,
    maxLength);
  printf("Number of lines: %d\n", actualNumberOfLines);
  
  int i;
  for(i = 0; i < actualNumberOfLines; ++i) {
    printf("Line #%-2d: '%s'.\n", i, arrayOfStrings[i]);
  }
 
  freeArrayOfStrings(arrayOfStrings, maxHeight, maxLength);
  return 0;
};
Morg4n
0 / 0 / 0
Регистрация: 25.04.2010
Сообщений: 5
10.04.2013, 09:28  [ТС]     Передача Указателя На Двумерный Массив В Функцию #6
dstat, anmartex, wow, 4 мать его часа гугления, чтобы все оказалось так просто - я полный кретин, спасибо!

lemegeton, если я правильно понял, Ваш вариант работает через массив указателей, такой подход, в моем случае вызовет слишком много лишних вопросов про то, как это конкретно работает, а я, к сожалению, не сильно пока разбираюсь в этом, но спасибо!
Помогите слегка разобраться:
C
1
2
3
 char **arrayOfStrings = (char**)malloc(sizeof(char*) * maxHeight); // я слегка сконфужен в этой строчке
 
arrayOfStrings[i] = (char*)malloc(sizeof(char) * maxWidth); // и в этой тоже =\
zss, аналогично и Ваш вариант, спасибо!
Правильно ли я понимаю:
C
1
2
3
char** ps=new char*[MAXSIZE]; // создаем "указатель массив" на массив указателей 
    for(int i = 0;i<MAXSIZE;i++)
             ps[i]=new char[MAXLENGTH]; // забиваем массив словами
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2013, 10:00     Передача Указателя На Двумерный Массив В Функцию
Еще ссылки по теме:

Передача указателя на метод в функцию - C++
Подскажите плиз. Есть некий класс и в нём метод: ... DWORD WINAPI func(LPVOID lParam) { ... return 1; } ...

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

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

Передача указателя на указатель в функцию - C++
Вопрос к знатокам: Есть абстрактный класс(Symbol) и его производный (Cross). Создаю указатель этого абстрактного класса(Symbol *first) ,...

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


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

Или воспользуйтесь поиском по форуму:
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
10.04.2013, 10:00     Передача Указателя На Двумерный Массив В Функцию #7
Цитата Сообщение от Morg4n Посмотреть сообщение
char **arrayOfStrings = (char**)malloc(sizeof(char*) * maxHeight);
Тут происходит три вещи.
1. Объявляется переменная arrayOfStrings -- "указатель на указатель на символ", можно считать его массивом указателей на символ или массивом строк.
2. Выделяется память под maxHeight указателей на строки. То есть, под maxHeight строк.
3. Присваивается указателю из п.1 адрес на свежевыделенную память.
Грубо говоря, выделяется память под сам массив строк.

Цитата Сообщение от Morg4n Посмотреть сообщение
arrayOfStrings[i] = (char*)malloc(sizeof(char) * maxWidth);
Тут каждому указателю на символ внутри массива указателей (читайте предыдущий пункт) выделяется память размером maxWidth байт. Грубо говоря, выделяется память под конкретные строки.
Yandex
Объявления
10.04.2013, 10:00     Передача Указателя На Двумерный Массив В Функцию
Ответ Создать тему
Опции темы

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