Има проблем при предаването на статично двумерен масив с функция
Опита както просто преминават Int ** масив Int А [3] [4]; TRANSP (А, 3, 4);
[Грешка] не може да конвертира 'Int (*) [3] на "Int **"
- Как да се премине на статичен масив във функцията. Функцията трябва да приемам динамични масиви. Претоварване, шаблони и STL не предлага.
- 2D статични масиви, съхранени в паметта линейно. Dynamic съхранява също линеен или не?
- Какво връзка има статичен 2D масив от указатели?
програмиране на 6 ноември '15 в 18:53
Ако сте масив обявен за
нешаблонен функцията, която е на масива като аргумент може да изглежда, например,
и призова като
Или той може да бъде обявен за
По отношение на тази функция,
не можете да го премине в масив обявен за
Това означава, че прехвърлянето е възможно, като се използват различни трикове, но най-вероятно няма да работи според очакванията ви.
Налице е универсален подход. За да тълкува клаузите двумерен масив, като едномерна, и предават ценностите на размера на всеки измерение масив.
Ето една демонстрация програма
Неговата продукция към конзолата
Ако се напише програма на С, но не и в C ++, тогава има променлива дължина масиви, и така щеше да бъде по-лесно.
В C ++, за тези цели е по-добре да се използва стандартен клас STD :: вектор
Що се отнася до въпроса ви
2) Статично 2D масиви се съхраняват линейно в паметта. Dynamic съхранява също линеен или не?
че ако го разпространява към паметта като двумерен масив, е естествено да му елементи ще бъдат съхранявани линейно в редове. например
Що се отнася до този въпрос
3) Каква връзка има статичен 2D масив от указатели?
тогава всеки масив в (с редки изключения) се превръща в имплицитно указател към първия си елемент.
В ССЗ да направите това е съвсем проста.
Може да прехвърли функцията на размерите на матрицата (достатъчно само "нисш") и се отнасят до елементи в индексите esteststvennym начин. Например:
Ето един пример на файла, което представя и двете версии на програмата и резултатите от нейното стартиране:
Ако все още имате въпроси, попитайте.
Тук е версията с указатели към "гъста" матрица низ.
Вземете статична матрица, което го прави един набор от насоки, тя преминава към функцията за транспониране, което прави куп "гъста" транспонирана матрица и връща нов масив от указатели към своята линия.
Е, преди да тръгнете на паметта, който вече притежавате безплатно?