John Bode..
34
当数组表达式出现在大多数上下文中时,其类型将从"N元素数组T"隐式转换为"指向T",其值设置为指向数组中的第一个元素.此规则的例外情况是,数组表达式是sizeof或者address(of &)运算符的操作数,或者数组是在声明中用作初始值设定项的字符串文字.
因此,表达式zippo"衰变"从类型int [4][2](int的2元素数组的4元素数组)到int (*)[2](指向int的2元素数组的指针).类似地,zippo[0]is 的类型int [2]被隐式转换为int *.
给定声明int zippo[4][2],下表显示了涉及zippo和任何隐式转换的各种数组表达式的类型:
Expression Type Implicitly converted to Equivalent expression
---------- ---- ----------------------- ---------------------
zippo int [4][2] int (*)[2]
&zippo int (*)[4][2]
*zippo int [2] int * zippo[0]
zippo[i] int [2] int *
&zippo[i] int (*)[2]
*zippo[i] int zippo[i][0]
zippo[i][j] int
&zippo[i][j] int *
*zippo[i][j] invalid
需要注意的是zippo,&zippo,*zippo,zippo[0],&zippo[0],并且&zippo[0][0]都具有相同的价值; 它们都指向数组的基数(数组的地址与数组的第一个元素的地址相同).但是,各种表达的类型都不同.