B>Да, двумерный массив располагается в непрерывном блоке памяти "построчно".
Что прямо следует из того, что двумерный массив — это просто массив массивов, а массив располагается последовательно.
А>Т.е. представление двухмерного массива в памяти, все время одномерный массив?
У меня почему-то сомнения относительно того, что это есть стандарт, а не особенность реализации под конкретную платформу... Если стандарт — киньте ссылку на п.п.
Здравствуйте, Uzumaki Naruto, Вы писали:
UN>Вы Кен Томпсон или Денис Ритчи? Ссылку на стандарт
Заняться тебе нечем!? Прочитай про устройство, распределение памяти и про оганизацию хранения в ней данных с аппаратной и программной точки зрения! Чувствую, много нового себе откроешь...
есть такая щтука — гуглем зовется. Попользуйся, литературы, я тебя уверяю, до куя и больше... Глядишь и на стандарт нарвешься...
Ну или попробуй хотя бы взять и почитать оригиналы книг, написанных выше перечисленными людьми...
Здравствуйте, Uzumaki Naruto, Вы писали:
А>>Т.е. представление двухмерного массива в памяти, все время одномерный массив?
UN>У меня почему-то сомнения относительно того, что это есть стандарт, а не особенность реализации под конкретную платформу... Если стандарт — киньте ссылку на п.п.
8.3.4/7 Arrays
A consistent rule is followed for multidimensional arrays. If E is an n-dimensional array of rank
i× j× . . . ×k, then E appearing in an expression is converted to a pointer to an (n − 1 )-dimensional array
with rank j× . . . ×k. If the * operator, either explicitly or implicitly as a result of subscripting, is applied to
this pointer, the result is the pointed-to (n − 1 )-dimensional array, which itself is immediately converted
into a pointer.
UN>У меня почему-то сомнения относительно того, что это есть стандарт, а не особенность реализации под конкретную платформу... Если стандарт — киньте ссылку на п.п.
Страуструп/Эллис точно писали о том, что многомерный массив — это массив массивов.
Другое дело, что не надо путать с type**, который есть массив указателей на массивы.
Это одно из тех мест, где массив не есть указатель на первый элемент. Соответственно, массив массивов и массив указателей на первые элементы массивов — вещи разные.
А>>Т.е. представление двухмерного массива в памяти, все время одномерный массив? UN>У меня почему-то сомнения относительно того, что это есть стандарт, а не особенность реализации под конкретную платформу... Если стандарт — киньте ссылку на п.п.
8.3.4
"it follows from all this that arrays in C++ are stored row-wise"
То есть если у тебя double a[5][4], то a[1][0] должен лежать по адресу (byte*)(&a[0]) + sizeof(double[4]).
И если sizeof(double[4]) == sizeof(double)*4 /*про это в стандарте не нашел, видимо компиляторы все-таки могут выравнивать в памяти*/, то тогда двумерный массив будет располагаться как одномерный.