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

Тема в разделе "Общие вопросы по С и С++", создана пользователем morg4n, 10 апр 2013.

Наш партнер Genesis Hackspace
  1. morg4n

    morg4n New Member

    Регистрация:
    5 июл 2010
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте. Как правильно передать указатель на двумерный массив и как с ним правильно работать?
    Код (C++):
    int input_strings(char* arr_str){
    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) {
    char arr_str[MAXSIZE][MAXLENGTH];
    int n;

    n = input_strings(&arr_str);
    }
     
  2. morg4n

    morg4n New Member

    Регистрация:
    5 июл 2010
    Сообщения:
    2
    Симпатии:
    0
    Решил вопрос следующем способом:
    Код (C++):
    Код:

    #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();
    }
    Но мне по-прежнему интересно: как, мать его, передать в функцию массив.
     
  3. morg4n

    morg4n New Member

    Регистрация:
    5 июл 2010
    Сообщения:
    2
    Симпатии:
    0
    Код (C++):
    #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;
    }
     
  4. rrrFer

    rrrFer Гость

    int input_strings(char* arr_str){

    ты передал указатель на массив символов, но у тебя же двумерный массив
    тебе надо передать указатель на массив указателей на массив символов (поставивь две звездочки)

    Добавлено:
    Код (Text):
    #include <cstdio>
    #define N 5
    #define M 80

    int input_strings(char *a[N], int n) {
    for (int i = 0; i < n; ++i)
    gets(a[i]);
    }

    int output_strings(char **a, int n) {
    for (int i = 0; i < n; ++i)
    puts(a[i]);
    }


    int main(void) {
    char **a;
    a = new char*[N]; // N указателей на массивы
    for (int i = 0; i < N; ++i)
    a[i] = new char[M]; // по каждому указателю будет строка из 80 символов

    input_strings(a, N);

    output_strings(a, N);

    // не забудь память освободить


    return 0;
    }
     
Загрузка...

Поделиться этой страницей