LINUX.ORG.RU

передача двухмерных массивов c/c++


0

0

создаём двухмерный массив const int sz1=10; const int sz2=20; int arr[sz1][sz2];

Передаю в функцию таким образом void bla_bla(&arr[0][0],sz1,sz2) при этом определение функции void bla_bla(int*,int,int) Все прекрасно работает.

Но как возвратить такой массив из функции мне не ясно. Например int* bla_bla(bla,bla) { a[sz1][sz2]; . ... return &a[0][0]; }

В программе имеем int b[sz1][sz2];

b=bla_bla(......) Это конечно не работает. Можно через указатель на b , но мне нужно напрямую . Как???

★★★

Для C++ - используйте std::vector или какой-нть самодельный класс. Для C - возвращайте int*, а индексы вычисляйте вручную

phoenix ★★★★
()

почитай про объявление static объектов внутри функции. Например

char * foo(); { static char str[15]; ... return str; }

mystr = foo();

На самом деле static char str[15]; объявлет глобальную переменную, которая "видна" только в функции foo

ukez
()
Ответ на: комментарий от ukez

>На самом деле static char str[15]; объявлет глобальную переменную, >которая "видна" только в функции foo

Об этом я не подумал

kitov ★★★
() автор топика

представь как массив выглядит в памяти и тебе хватит одного указателя на 0-ой элемент

Pi ★★★★★
()
Ответ на: комментарий от Pi

>представь как массив выглядит в памяти и тебе хватит одного указателя на 0-ой элемент

Но если передаю например int a[10][20] как int* a- компилятор ругается.
приходится как &a[0][0] и всё работает , побочный эффект - не работает конструкция a[i][j] , надо a[i*(вторая размерность)+j)

В общем разобрался.

kitov ★★★
() автор топика
Ответ на: комментарий от kitov

int a[10][20] чтобы компилятор не ругался и можно было по человечески индексами пользоваться передается как int** a; собственно идеалогически так оно и есть.

anonymous
()
Ответ на: комментарий от anonymous

>собственно идеалогически так оно и есть.

нет так оно не есть. ето совсем разные вещи.

cvv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.