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

问题描述 投票:0回答:1

我目前正在学习C语言。 我想知道“数组衰减”是什么意思,以及它何时发生。

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


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

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


c arrays pointers implicit-conversion
1个回答
2
投票

来自 C 标准(6.3.2.1 左值、数组和函数指示符)

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

下面两个变量

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

有不同的类型。第一个是指向

char[2]
类型对象的指针。第二个是一个二维数组,包含四个
char[2]
类型的元素。

当数组

zippo2
在除引号中列出的表达式之外的表达式中使用时(例如将其与
sizeof
运算符一起使用),则其指示符将隐式转换为指向其第一个元素的指针,并且具有与变量
zippo

© www.soinside.com 2019 - 2024. All rights reserved.