2010-12-09 83 views
1

这是我的代码:为什么编译器不会闪烁任何错误?

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

int (*q)[3]; 

q=a1; 

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

任何人都可以解释,为什么?

+3

如果编译器打印一条消息而不是闪烁,会好吗? – 2010-12-09 17:51:28

+0

哪个编译器?指向指针的指针应该是'int ** p` irrc。 – 2010-12-09 17:52:32

+0

因为它符合你的要求。 – benjy 2010-12-09 17:53:04

回答

4

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

1

您指定的a1第一个元素的地址指针q

1

的类型是等同放着清单 - 当你在赋值语句中使用a1它变成一个指针,和急 - 匹配的类型。

了解更多信息:

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