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

morg4n

New member
05.07.2010
2
0
#1
Здравствуйте. Как правильно передать указатель на двумерный массив и как с ним правильно работать?
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);
}
 

morg4n

New member
05.07.2010
2
0
#2
Решил вопрос следующем способом:
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();
}
Но мне по-прежнему интересно: как, мать его, передать в функцию массив.
 

morg4n

New member
05.07.2010
2
0
#3
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;
}
 
R

rrrFer

#4
int input_strings(char* arr_str){

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

Добавлено:
Код:
#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;
}