Avatar ·

什么是C++中的数组到指针退化(array-to-pointer decay)?

大家好!我刚开始学习C++,遇到了一个关于数组的奇怪行为。当我把数组传递给函数并尝试用`sizeof`获取其大小时,得到的结果并非预期。 示例如下: ```cpp #include void printSize(int arr[]) { std::cout << "函数内部:" << sizeof(arr) << " 字节" << std::endl; } int main() { int numbers[5] = {1, 2, 3, 4, 5}; std::cout << "在main中:" << sizeof(numbers) << " 字节" << std::endl; // 输出20(5 * 4) printSize(numbers); // 在64位系统上输出8(指针大小) return 0; } ``` 我原本期望函数内部的`sizeof(arr)`也返回20,但实际得到的是8。为什么会这样?我听说过“array decay”(数组退化)这个术语,但不太明白它的含义。这对数组传递给函数有什么影响?如何正确处理数组才能不丢失其大小信息? 请详细解释,最好能附上示例。提前感谢!