【发布时间】:2014-11-24 00:41:37
【问题描述】:
我有一个关于 C sizeof() 函数的简短问题。我将一个数组传递给一个函数,在该函数内部,我想检查数组的大小。然而,不管输入数组的大小,在函数内部,它似乎总是大小为 4。例如:
void checkArraySize(char data[])
{
int internalSize = sizeof(data); //internalSize is reported as 4
}
void main(void)
{
char data[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
int externalSize = sizeof(data); //externalSize is reported as 8
checkArraySize(data);
}
作为代码状态的cmets,在调用checkArraySize()这样的函数之前,我检查了数组的大小,结果显示为8。但是,当我在函数内部检查数组的大小时,它只报告为有 4 个元素(无论输入数组的大小如何,它都会报告 4 个元素)。
当我看到这样的问题时,通常是因为我对该主题的理解存在差距。所以,我确定我只是错过了传递数组的工作原理。如果没有,有什么想法为什么会发生这种情况?
注意:这是在 PIC32 上,所以我使用的是 Microchip 的 MPLAB X IDE 和 XC32 编译器。
【问题讨论】:
-
顺便说一句:
sizeof不是函数,而是运算符。这就是为什么你可以在类型(使用括号)和表达式(不需要括号)上使用它。除非它是可变修改的类型,否则不会计算参数,因此结果是编译时常量表达式。 (如果你没有说你在嵌入式系统上,我会建议你main总是返回int。不过,在独立环境中事情更加多样化。)