ПредишенСледващото

Има проблем при предаването на статично двумерен масив с функция

Опита както просто преминават Int ** масив Int А [3] [4]; TRANSP (А, 3, 4);

[Грешка] не може да конвертира 'Int (*) [3] на "Int **"

  1. Как да се премине на статичен масив във функцията. Функцията трябва да приемам динамични масиви. Претоварване, шаблони и STL не предлага.
  2. 2D статични масиви, съхранени в паметта линейно. Dynamic съхранява също линеен или не?
  3. Какво връзка има статичен 2D масив от указатели?

програмиране на 6 ноември '15 в 18:53

Ако сте масив обявен за

нешаблонен функцията, която е на масива като аргумент може да изглежда, например,

и призова като

Или той може да бъде обявен за

По отношение на тази функция,

не можете да го премине в масив обявен за

Това означава, че прехвърлянето е възможно, като се използват различни трикове, но най-вероятно няма да работи според очакванията ви.

Налице е универсален подход. За да тълкува клаузите двумерен масив, като едномерна, и предават ценностите на размера на всеки измерение масив.

Ето една демонстрация програма

Неговата продукция към конзолата

Ако се напише програма на С, но не и в C ++, тогава има променлива дължина масиви, и така щеше да бъде по-лесно.

В C ++, за тези цели е по-добре да се използва стандартен клас STD :: вектор

Що се отнася до въпроса ви

2) Статично 2D масиви се съхраняват линейно в паметта. Dynamic съхранява също линеен или не?

че ако го разпространява към паметта като двумерен масив, е естествено да му елементи ще бъдат съхранявани линейно в редове. например

Що се отнася до този въпрос

3) Каква връзка има статичен 2D масив от указатели?

тогава всеки масив в (с редки изключения) се превръща в имплицитно указател към първия си елемент.

В ССЗ да направите това е съвсем проста.

Може да прехвърли функцията на размерите на матрицата (достатъчно само "нисш") и се отнасят до елементи в индексите esteststvennym начин. Например:

Ето един пример на файла, което представя и двете версии на програмата и резултатите от нейното стартиране:

Ако все още имате въпроси, попитайте.

Тук е версията с указатели към "гъста" матрица низ.

Вземете статична матрица, което го прави един набор от насоки, тя преминава към функцията за транспониране, което прави куп "гъста" транспонирана матрица и връща нов масив от указатели към своята линия.

Е, преди да тръгнете на паметта, който вече притежавате безплатно?

Подкрепете проекта - споделете линка, благодаря!