Я знаю, что this answer нарушает reinterpret_cast
rules, но также предполагает, что субмассивы будут распределяться линейно.Поддерживаются ли линейные массивы под-массивов?
Я полагал, что это не было гарантировано, но, когда я ищу стандарт, я нахожу, что моя уверенность колеблется. Если я статически выделяю 2D-массив, например:
int foo[][4] = { { 5, 7, 8 },
{ 6, 6 },
{},
{ 5, 6, 8, 9 } };
Я позволил предположить, что все элементы будут распределены линейно? То есть сказать, что если foo[0]
находится по адресу 0x00000042, будет:
foo[1]
быть по адресу 0x00000052foo[2]
быть по адресу 0x00000062foo[3]
быть по адресу 0x00000072
Эти адреса находятся в шестнадцатеричном формате, и да, они предоставляют пространство для 4-элементной подматрицы с sizeof(int) == 4
; они могут и не могут быть инициализированы нулем.
Если 'foo [0]' находится по адресу '0x00000042',' foo [1] 'будет находиться по адресу' 0x00000052', только если 'sizeof (int)' is '4'. Я подозреваю, что вы предположили, что 'sizeof (int)' is '4'. –
@NathanOliver Это определенно не обман, так как он 'malloc' хранит память в цикле, так что вы абсолютно не гарантируете, что можно сделать о макете этих подмассивов в памяти. –
@JonathanMee Вопрос не одинаков, но ответы описывают статический 2d-массив, а не динамически выделенный массив указателей. следовательно, от меня никто не голосовал. – NathanOliver