Q由于数组引用会退化为指针,如果arr是一个数组,那么arr和&arr?
A类型。
在标准 C 中,&arr会产生一个指向整个数组的指针,类型为“指向 T 数组的指针”。(在 ANSI C 之前,&中&arr通常会引发警告,并且通常被忽略。)在所有 C 编译器下,对数组的简单引用(没有显式&)会产生一个指向数组第一个元素的指针,类型为“指向 T 的指针”。
对于一个简单的数组
int a[10];对...的引用a类型为“指向int”,而&a是“指向 10 个ints”的数组的指针。对于二维数组,例如
int array[NROWS][NCOLUMNS];对...的引用array类型为“指向NCOLUMNS ints”的数组的指针,而&array类型为“指向NROWSs”的数组的指针。NCOLUMNS ints。”
参考文献:ISO Sec. 6.2.2.1, Sec. 6.3.3.2
Rationale Sec. 3.3.3.2
H&S Sec. 7.5.6 p. 198