Почему компилятор не высвечивает какую-либо ошибку? - PullRequest
1 голос
/ 09 декабря 2010

Это мой код:

int a1[][3]={{1,2,3,4,5,6},{4,5,6,5}};

int (*q)[3];

q=a1;

q - указатель на массив из 3 целых чисел.Но a1 не соответствует типу q.Все же назначение работает, и никакая ошибка не приходит.

Кто-нибудь может объяснить, почему?

Ответы [ 4 ]

4 голосов
/ 09 декабря 2010

Типы соответствуют. a1 - массив массивов длиной 3. q - указатель на массив целых чисел длиной 3. Массив распадается на указатель в большинстве случаев; это один из них, так что все в порядке!

2 голосов
/ 09 декабря 2010
1 голос
/ 09 декабря 2010

Типы эквивалентны - когда вы используете a1 в операторе присваивания, он превращается в указатель и предварительно совпадающие типы.

Много дополнительной информации:

http://c -faq.com / aryptr / index.html

1 голос
/ 09 декабря 2010

Вы назначаете адрес первого элемента a1 указателю q.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...