我确定q
inint q[6][4]
是 类型(**q)[4]
,即pointer to a pointer to an integer array sized 4
。但是我有这本书(我觉得它很可疑!!)说int q[][4]
函数定义void foo(int q[][4]){}
中的部分与int (*q)[4]
. 我对这本书很矛盾,但让我提出一些在我脑海中突然出现的问题供您考虑.您的详细解释非常受欢迎。
1) 声明时,in的类型和q
inint q[][4]
的类型一样int q[6][4]
吗?与书上所说的相反,我认为q[][4]
什么都不q[0][4]
是,我觉得 q 是类型(**q)[4]
,而不是(*q)[4]
。我是对的吗?你对此有何看法?
2) (最令人困惑的一点)我知道传递int *q
和int q[]
(或int q[4]
)在 C 中是相同的,因为后者减少到前者。但我已经从编译器验证了int (*q)[5]
与 不同的类型int (*q)[4]
,那么传递之间有什么区别函数的参数A) int (*q)[]
B)int (*q)[4]
和C)int (*q)[5]
? 请详细回答这部分。
3)传递int q[][4]
给函数与传递int q[6][4]
C 有何不同?在这两种情况下都q
归约到吗?(**q)[4]