2015-02-16 2 views
0

В C у нас есть двумерные массивы, то есть a[m][n].C Двумерные массивы: Является ли первый «уровень» массивом указателей?

В одномерных массивах a является указателем на начало массива.

Как насчет двухмерных массивов? Делает ли a[i] указатель на начало строки i в массиве? Таким образом, a[i] представляет собой массив указателей, передаваемых функции в следующем вопросе function(int **a, m, n)?

+0

«* В одномерных массивах a является указателем на начало массива.« Нет, это не так. – alk

+0

'a [m] [n]' - массив массивов. – alk

+0

a является указателем на его первый элемент. –

ответ

2

Имеет ли [i] указатель на начало строки i в массиве?

№ Данные двухмерного массива в C являются непрерывным блоком элементов и некоторым умным доступом к индексированию. Но 2D-массив представляет собой массив массивов, а не массив указателей.

Формально a[i] содержит 1D-массив. Это может распадаться на указатель на первый элемент i-й строки в определенных контекстах, но его тип по-прежнему T[n], для некоторого типа T, который вы не указали.

+0

1D массив указателей? – Dean

+0

@Dean 1D массив указателей * what *? – juanchopanza

+0

1D массив указателей, каждый указывает на первый элемент массивов «второго уровня». – Dean

1

В одномерных массивах a является указателем на начало массива.

Неправильно. a - массив. Когда вы используете a в выражении, оно «распадается» на указатель на первый элемент. Чтобы лучше понять это, read this chapter of the C FAQ, в частности this one.

Как насчет двухмерных массивов? Указывает ли [i] указатель на начало строки i в массиве?

Количество В массиве 2D, a[i] представляет собой массив, в то время как int a[x][y]; представляет собой массив из массивов. В любом месте нет указателей.

Возможно, вы сбиты с толку, потому что C разрешает этот синтаксис: int a[][N] = ...;, но этот синтаксис просто означает, что размер массива массивов зависит от количества элементов в списке инициализации.

+0

«Когда вы используете a в выражении». Конечно, это зависит от выражения. Например, если выражение представляет собой RHS присвоения указателю на массив, то оно не затухает. – juanchopanza

+0

@juanchopanza Ну, да, но это не очень полезно перетащить все детали этого в этот ответ, учитывая, что OP является новичком. – Lundin

+0

Не должен ли [x] [y] быть элементом, а не массивом массивов? – rcgldr