Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Си. Как правильно передать двумерный массив функции?

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Си. Как правильно передать двумерный массив функции?
Имя
Сообщение << Старые топики   Новые топики >>
Си. Как правильно передать двумерный массив функции? - 2006-12-24 23:34:40.570000   
Param0n

Сообщений: 113
Оценки: 0
Присоединился: 2006-10-31 23:02:16.050000
Передаю функции двумерный массив… но, увы, получается ошибка сегментации)) Пробовал передавать указатель таким образом (*ms)[MAX], эффект тот же… Для примера вот программа компилирую GCC в среде Dev-C++

#include <stdio.h>
#define MAX 10

int main(void) {
int ms[MAX][MAX], size;

invert(**ms, MAX);
}

int invert(int** ms, int size) {
int i;

for(i = 0; i < size; i++) {
ms = 1;
}
}

Научите, пожалуйста, передавать двумерные массивы в функцию,

в отчаянии!! не пью не сплю((
Post #: 1
RE: Си. Как правильно передать двумерный массив функции? - 2006-12-25 00:15:42.820000   
je0n

Сообщений: 126
Оценки: 0
Присоединился: 2004-07-05 23:40:07
Создай класс "двумерный массив"
типа того (это уже 3-е редактирование, все проверил работает):

#include &lt;stdio.h&gt; #include &lt;iostream.h&gt; const MIN=5; const MAX=5; class massiv { public: int ms[MIN][MAX]; int size; }; int massiv_func(massiv&); int main() { massiv ms; massiv_func(ms); cout&lt;&lt;ms.ms[0][0]&lt;&lt;"\n"&lt;&lt;"cool"; return 0; } int massiv_func(massiv& my) { my.ms[0][0]=5; return 0; } думаю разберешься. создаю класс, а уже класс сую в функцию, потом вывожу изменившеся значение.
Post #: 2
RE: Си. Как правильно передать двумерный массив функции? - 2006-12-25 11:18:48.946666   
Param0n

Сообщений: 113
Оценки: 0
Присоединился: 2006-10-31 23:02:16.050000
Работает конечно, спасибо)))

но мы библеотеку функций решили сделать, всё уже наработано нужно только научиться указатели на двумерные массивы правильно передавать )) Так вот библиотека расчитана на то, что с ней сможет работать любой)) а вот создавать класс что бы передать его функции - это мне кажеться не совсем удобно, не смотря на то, что наши функции принимают всего по одному двумерному массиву…
Post #: 3
RE: Си. Как правильно передать двумерный массив функции? - 2006-12-25 12:07:45.336666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
во-первых, проставь в опциях gcc -Wall, и объявляй функции до того как их используешь. це в этом плане либерален, но… просто если это делать, то gcc тебе информативных warning'ов будет кидать, а не просто говорить фразы типа "тут я использую функцию про которую нифига не знаю".
во-вторых, передача массива – это передача указателя на него. а указатель на массив можно получить просто используя имя его:invert(ms, MAX);ты же пытался дважды разадресовать ms, то есть, ровно тот же результат, ровно тот же асм-код был бы сгенерён если бы ты написал вместо **ms, выражение ms[0][0].
Post #: 4
RE: Си. Как правильно передать двумерный массив функции? - 2006-12-25 12:42:16.650000   
Param0n

Сообщений: 113
Оценки: 0
Присоединился: 2006-10-31 23:02:16.050000
Ответ был найден)) Всем спасибо. Всё оказалось намного проще ;)

#include &lt;stdio.h&gt; #define MAX 10 int invert(int (*ms)[MAX]) { int i; for(i = 0; i &lt; MAX; i++) { ms[i][i] = 1; } } int main(void) { int ms[MAX][MAX]; invert(ms); }
Post #: 5
RE: Си. Как правильно передать двумерный массив функции? - 2006-12-25 14:42:51.743333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
почитай для разнообразия k&r, там всё это описано… и твой более простой способ и мой и все остальные. методом научного тыка можно изучать особенности конкретного компилятора, но уж язык стоит изучать более систематизированно.
Post #: 6
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Си. Как правильно передать двумерный массив функции?







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.