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