2013-06-24 4 views
2

У меня есть следующие два двумерный массив:размер двумерного массива в C

#define ROW 100 
#define LINE 50 

int a[ROW][LINE]; 

, но как получить массив SIZEOF за последние 45 строк, например a[55][0] к a[99][99]?

мы можем сделать что-то вроде sizeof(&a[55])?

+0

45 последних строк будут 'a [55] [0]' to [a] [ROW - 1] [LINE - 1] '. –

+0

да, спасибо! – user2131316

+0

Как сказал Хантер, но вы, как правило, хотите избежать таких массивов фиксированного размера, как это, потому что вы жестко кодируете размер буфера и в какой-то момент вам захочется хранить больше ... – cmaster

ответ

7

sizeof из массив должен быть равен sizeof одного элемента, умноженного на количество элементов. Итак, если вы хотите знать, сколько памяти занято определенным количеством строк, просто вычислите количество элементов и умножьте их на размер элемента. 45 строк потребуется

45 * LINE * sizeof a[0][0] 

или, альтернативно

45 * sizeof a[0] 

Это действительно не имеет значения, являются ли эти последние 45 строк. Все строки одинаковы.

1

Если вы хотите только последние строки из строки 55 и вперед, как о

(ROW - 55) * LINE * sizeof(int) 

Если вы просто хотите, общий N количество строк, то как насчет

N * LINE * sizeof(int) 
+0

можно ли использовать указатель, чтобы получить размер? – user2131316

+0

Правильный синтаксис 'sizeof int'? Он не находится в C89, по крайней мере, – kotlomoy

+0

@ user2131316 Как только массив распадается на указатель, все, что у вас есть, это указатель, а указатели не имеют информации (например, размера) о данных, на которые указывает. –