Это мой код:
int a1[][3]={{1,2,3,4,5,6},{4,5,6,5}}; int (*q)[3]; q=a1;
q - указатель на массив из 3 целых чисел.Но a1 не соответствует типу q.Все же назначение работает, и никакая ошибка не приходит.
q
a1
Кто-нибудь может объяснить, почему?
Типы соответствуют. a1 - массив массивов длиной 3. q - указатель на массив целых чисел длиной 3. Массив распадается на указатель в большинстве случаев; это один из них, так что все в порядке!
См. ЧАВО C по массивам и указателям В частности, Вопрос 6.2 .
Типы эквивалентны - когда вы используете a1 в операторе присваивания, он превращается в указатель и предварительно совпадающие типы.
Много дополнительной информации:
http://c -faq.com / aryptr / index.html
Вы назначаете адрес первого элемента a1 указателю q.