2014-01-12 6 views
-1

Можно ли рассматривать двумерный массив как одномерный массив указателей, который индекс j является указателем на массив из j строки матрицы? Например, если у меня есть массив [4] [4]. Является ли arr [2] указателем на второй массив строк?двумерный массив как один размерный массив указателей

+0

Вы рассматриваете одномерный массив как просто указатель? – nhgrif

+0

Прочтите раздел 6 [comp.lang.c FAQ] (http://www.c-faq.com). –

ответ

0

No. Данные непрерывны в памяти.

arr [2] знал бы размер одного массива и добавлял бы 2 раза к указателю массива, чтобы перейти к соответствующему смещению.

+0

Зависит от того, как он создан. Если он статически выделяется с фиксированными размерами, то вы правы в том, что данные смежны, но вполне справедливо объявлять ' ** arr' и позднее распределять фактические размеры. Я делаю это, например, для получения матриц треугольной формы. – pjs

0

Можно ли рассматривать двумерный массив как одномерный массив указателей, который индекс j является указателем на массив из j строки матрицы?

Да. Но всегда помните, что массивы не указатели. В случае 2D-массива array[M][N] пробелы выделяются для каждого элемента массива array[i] (i здесь int). Но в случае массива указателей *array[M] вам необходимо выделить место для каждого элемента array.

Например, если у меня есть массив [4] [4]. Является ли arr [2] указателем на второй массив строк?

Да. arr2 распадается на указатель на строку 2

Смежные вопросы