Выполняя некоторые исследования многомерных массивов в C и как они хранятся в памяти, я наткнулся на это: «Does C99 guarantee that arrays are contiguous?». Топ проголосовали ответ гласит, что «Кроме того, должна быть обеспечена возможность перебирать весь массив с (символ *)», а затем дает следующую «правильный» код:Итерация по двумерному массиву с помощью одного указателя char
int a[5][5], i, *pi;
char *pc;
pc = (char *)(&a[0][0]);
for (i = 0; i < 25; i++)
{
pi = (int *)pc;
DoSomething(pi);
pc += sizeof(int);
}
плакат продолжающую сказать что «делать то же самое с (int *) было бы неопределенным поведением, потому что, как сказано, массива [25] из int не было».
Эта линия меня смущает.
Почему использование указателя char представляет собой допустимое/определенное поведение при подстановке его с помощью указателя целого числа?
Извините, если ответ на мой вопрос должен быть очевиден. :(
Связанный ответ и прилагаемые комментарии обсуждают проблему довольно широко. –