c中的数组衰减是什么以及何时发生?

时间:2019-07-30 09:55:15

标签: c arrays pointers implicit-conversion

我目前正在学习C语言。 我想知道“阵列衰减”的含义是什么,何时发生。

我想知道下面的两个变量是否以相同的方式解释。


char(*zippo)[2] = NULL;
char zippo2[4][2];

zippo = (char(*)[2])malloc(sizeof(char[2]) * 4);


1 个答案:

答案 0 :(得分:0)

根据C标准(6.3.2.1左值,数组和函数指示符)

  

3除非它是sizeof运算符的操作数或一元&   运算符,或者是用于初始化数组的字符串文字,   类型为“类型数组”的表达式将转换为   类型为“要输入的指针”的表达式指向初始   数组对象的元素,不是左值。如果数组对象   具有寄存器存储类,行为未定义。

下面的两个变量

char(*zippo)[2] = NULL;
char zippo2[4][2];

具有不同的类型。第一个是指向char[2]类型的对象的指针。第二个是二维数组,其中包含四个char[2]类型的元素。

当表达式中使用数组zippo2除外,但引号中列出的表达式除外(例如,将其与sizeof运算符配合使用),则其指示符将隐式转换为指向其第一个元素的指针,并且具有相同的类型作为变量zippo