Си. Как правильно передать двумерный массив функции?
Пользователи, просматривающие топик: 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; } } Научите, пожалуйста, передавать двумерные массивы в функцию, в отчаянии!! не пью не сплю((
|
|
|
RE: Си. Как правильно передать двумерный массив функции? - 2006-12-25 00:15:42.820000
|
|
|
je0n
Сообщений: 126
Оценки: 0
Присоединился: 2004-07-05 23:40:07
|
Создай класс "двумерный массив" типа того (это уже 3-е редактирование, все проверил работает):
#include <stdio.h>
#include <iostream.h>
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<<ms.ms[0][0]<<"\n"<<"cool";
return 0;
}
int massiv_func(massiv& my)
{
my.ms[0][0]=5;
return 0;
}
думаю разберешься. создаю класс, а уже класс сую в функцию, потом вывожу изменившеся значение.
|
|
|
RE: Си. Как правильно передать двумерный массив функции? - 2006-12-25 11:18:48.946666
|
|
|
Param0n
Сообщений: 113
Оценки: 0
Присоединился: 2006-10-31 23:02:16.050000
|
Работает конечно, спасибо))) но мы библеотеку функций решили сделать, всё уже наработано нужно только научиться указатели на двумерные массивы правильно передавать )) Так вот библиотека расчитана на то, что с ней сможет работать любой)) а вот создавать класс что бы передать его функции - это мне кажеться не совсем удобно, не смотря на то, что наши функции принимают всего по одному двумерному массиву…
|
|
|
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].
|
|
|
RE: Си. Как правильно передать двумерный массив функции? - 2006-12-25 12:42:16.650000
|
|
|
Param0n
Сообщений: 113
Оценки: 0
Присоединился: 2006-10-31 23:02:16.050000
|
Ответ был найден)) Всем спасибо. Всё оказалось намного проще ;) #include <stdio.h>
#define MAX 10
int invert(int (*ms)[MAX]) {
int i;
for(i = 0; i < MAX; i++) {
ms[i][i] = 1;
}
}
int main(void) {
int ms[MAX][MAX];
invert(ms);
}
|
|
|
RE: Си. Как правильно передать двумерный массив функции? - 2006-12-25 14:42:51.743333
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
почитай для разнообразия k&r, там всё это описано… и твой более простой способ и мой и все остальные. методом научного тыка можно изучать особенности конкретного компилятора, но уж язык стоит изучать более систематизированно.
|
|
|
|
|