我目前正在学习C语言。 我想知道“数组衰减”是什么意思,以及它何时发生。
我想知道下面的两个变量是否以相同的方式解释。
char(*zippo)[2] = NULL;
char zippo2[4][2];
zippo = (char(*)[2])malloc(sizeof(char[2]) * 4);
来自 C 标准(6.3.2.1 左值、数组和函数指示符)
3 除非它是 sizeof 运算符或一元 & 的操作数 运算符,或者是用于初始化数组的字符串文字, 具有“类型数组”类型的表达式被转换为 类型为“指向类型的指针”的表达式,指向初始值 数组对象的元素并且不是左值。如果数组对象 有寄存器存储类,行为未定义。
下面两个变量
char(*zippo)[2] = NULL;
char zippo2[4][2];
有不同的类型。第一个是指向
char[2]
类型对象的指针。第二个是一个二维数组,包含四个 char[2]
类型的元素。
当数组
zippo2
在除引号中列出的表达式之外的表达式中使用时(例如将其与 sizeof
运算符一起使用),则其指示符将隐式转换为指向其第一个元素的指针,并且具有与变量zippo
。