为什么编译器没有闪烁任何错误?

时间:2010-12-09 17:49:32

标签: c

这是我的代码:

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

int (*q)[3];

q=a1;

q是指向3个整数数组的指针。但a1不符合q的类型。然而,任务有效,没有错误。

任何人都可以解释原因吗?

4 个答案:

答案 0 :(得分:4)

这些类型符合要求。 a1是一个长度为3的int数组。 q是指向长度为3的整数数组的指针。在大多数情况下,数组会衰减到指针;这是其中之一,所以一切都很好!

答案 1 :(得分:2)

请参阅C faq on arrays and pointers。具体而言,Question 6.2

答案 2 :(得分:1)

您正在将a1的第一个元素的地址指定给指针q

答案 3 :(得分:1)

类型是等价的 - 当你在赋值语句中使用a1时,它会变成一个指针和presto匹配类型。

有更多信息:

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

相关问题