2016-07-20 3 views
3

Я могу представить двумерный массив как заразную последовательность байтов. Мой вопрос в том, может ли он рассматриваться как одномерный массив с явным приведением без вызова неопределенного поведения?Определено ли поведение для обработки 2-мерного массива как одного?

Я проверил следующий код с gcc, и он работал нормально и не разбился. Что говорит об этом стандарт?

int main(void) 
{ 
    char buf[2][5]; 
    strcpy((char *)buf, "link 101"); 
    printf("%s\n", (char *)buf); 
    return 0; 
} 

Просто говорю, у меня есть все основания думать об этом.

+0

Fyi «У меня есть все основания думать, что это» - эта причина, вероятно, заслуживает упоминания в вашем вопросе. – WhozCraig

+1

Да, это послушно. См. [Одномерный доступ к многомерному массиву: четко определенный C?] (Http://stackoverflow.com/questions/6290956/one-dimensional-access-to-a-multidimensional-array-well-defined-c) , – dxiv

+0

http://stackoverflow.com/questions/27093290/can-an-array-have-trailing-padding – BLUEPIXY

ответ

-1

Я считаю, что при использовании явного литья он может рассматриваться как одномерный массив.

По существу просто удаляется двойной указатель на один, и я считаю, что использование явного литья в этой форме является стандартным.

char ** buf; //equal to char[][] 
(char*) buf; //equal to char[] 

 Смежные вопросы

  • Нет связанных вопросов^_^