Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2013, 06:02   #1
morg4n
 
Регистрация: 05.12.2011
Сообщений: 8
По умолчанию Передача указателя на двумерный массив в функцию

Здравствуйте. Как правильно передать указатель на двумерный массив и как с ним правильно работать?

Код:
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);
}
решено
Код:
#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;
}

Последний раз редактировалось morg4n; 10.04.2013 в 09:33.
morg4n вне форума Ответить с цитированием
Старый 10.04.2013, 06:35   #2
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

А где, собственно, функция, принимающая двойной указатель?
В вашем случае можно привести и работать по строкам...
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 10.04.2013, 06:38   #3
morg4n
 
Регистрация: 05.12.2011
Сообщений: 8
По умолчанию

Про двойной указатель я ничего не говорил, все что мне нужно это передать указатель на массив в функцию, чтобы ввести текст. Но у меня ничего не выходит.
morg4n вне форума Ответить с цитированием
Старый 10.04.2013, 06:59   #4
morg4n
 
Регистрация: 05.12.2011
Сообщений: 8
По умолчанию

Решил вопрос следующем способом:
Код:
#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 вне форума Ответить с цитированием
Старый 11.04.2013, 17:32   #5
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию

У себя в запасниках нарыл В примере используется передача матрицы в функцию вывода без помощи указателей, тупо в лоб. Просмотрите, может поймёте в чём фишка
Код:
//////////////////////////////////////////////////////////////////////////
/*Заполнение двух матриц 10 Х 10 случайными числами от 10 до 99,        */
/*обозначение главной диагонали(ГД) в первой(A) и побочной диагонали(ПД)*/
/*во второй(B) еденицами, обнуление элементов выше ГД в A и выше ПД в B,*/
/*обнуление элементов ниже ГД в A и ниже ПД в B, после каждого действия */
/*вывод обеих матриц отдельной функцией                                 */
//////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <stdlib.h>
#define N 10
#define M 10

void vivod(int A[N][M], int B[N][M])//функция вывода матрицы
{
int i, j;
printf("Матрица A имеет вид:\n");//вывод матрицы A
	for(i = 0;i < N;i++)
	{
		for(j = 0;j < M;j++)
		{
		printf("%2d |",A[i][j]);
		}
	printf("\n");
	}
printf("\nМатрица B имеет вид:\n");//вывод матрицы B
	for(i = 0;i < N;i++)
	{
		for(j = 0;j < M;j++)
		{
		printf("%2d |",B[i][j]);
		}
	printf("\n");
	}
}

main()
{
setlocale(LC_ALL,"RUS");
int A[N][M], B[N][M], i, j, a_diapazon = 10, b_diapazon = 99;//a_diapazon и b_diapazon границы диапазона случайных чисел
	for(i = 0;i < N;i++)//заполнение обеих матриц
	{
		for(j = 0;j < M;j++)
		{
		A[i][j] = (rand() % (b_diapazon - a_diapazon + 1)) + a_diapazon;
		B[i][j] = (rand() % (b_diapazon - a_diapazon + 1)) + a_diapazon;
		}
	}
vivod(A, B);//вывод обеих матриц
/*обозначение диагоналей*/
j = 0;
	for(i = 0;i < M;i++)//главной в A
	{
	A[i][j] = 1;
	j++;
	}
j = N;
	for(i = 0;i < M;i++)//побочной в B
	{
	B[i][j - 1] = 1;
	j--;
	}
vivod(A, B);//вывод обеих матриц
/*обнуление элементов выше ГД в A и выше ПД в B*/
	for(i = 0;i < N;i++)
		for(j = i + 1;j < N;j++) A[i][j] = 0;
	for(i = 0;i < N;i++)
		for(j = 0;j < N - 1 - i;j++) B[i][j] = 0;
vivod(A, B);//вывод обеих матриц
/*обнуление элементов ниже ГД в A и ниже ПД в B*/
	for(i = 0;i < N;i++)
		for(j = 0;j < i;j++) A[i][j] = 0;
	for(i = 0;i < N;i++)
		for(j = N - i;j < N;j++) B[i][j] = 0;
vivod(A, B);//вывод обеих матриц
printf("\nГотово");
getch();
}
Упс, не заметил, что вы уже так и сделали
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.

Последний раз редактировалось Че Гевара; 12.04.2013 в 13:37.
Че Гевара вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возвращение из функции указателя на двумерный массив _J_ Общие вопросы C/C++ 2 29.12.2011 01:34
передача в функцию указателя на начало массива dasvex Помощь студентам 4 28.08.2011 09:29
Передача в функцию указателя на динамический массив Airou Общие вопросы C/C++ 4 05.05.2011 17:07
Передача указателя на массив в функцию loser Общие вопросы C/C++ 2 19.02.2010 19:41
передача указателя в функцию arturka Помощь студентам 3 06.07.2008 00:25