До сих пор это было так, но после того, как я узнал, что компилятор может использовать данные для выравнивания для требований к архитектуре, например, я сомневаюсь. Поэтому мне интересно, имеет ли char[4][3]
тот же формат памяти, что и char[12]
. Может ли компилятор добавить прописку после части char[3]
, чтобы она была выровнена, так что весь массив принимает на самом деле 16 байт?
Фоновая история о том, что функция библиотеки берет связку строк с фиксированной длиной в параметре char*
, поэтому он ожидает непрерывный буфер без paddig, а длина строки может быть нечетной. Поэтому я думал, что объявляю массив char[N_STRINGS][STRING_LENGTH]
, а затем удобно заполняю его и передаю его функции, отбросив его до char*
. Пока это работает. Но я не уверен, что это решение переносимо.