面试题答案
一键面试#include <stdio.h>
// 定义一个函数,接收一个数组作为参数
void getArrayLength(int arr[]) {
// 在函数内部,使用 sizeof 操作符获取数组长度
// 这里的 arr 实际上已经退化为一个指针,所以 sizeof(arr) 获取的是指针的大小
size_t length = sizeof(arr) / sizeof(arr[0]);
printf("在函数内部获取的数组长度(错误值): %zu\n", length);
}
int main() {
int myArray[] = {1, 2, 3, 4, 5};
// 在 main 函数中获取数组的真实长度
size_t trueLength = sizeof(myArray) / sizeof(myArray[0]);
printf("数组的真实长度: %zu\n", trueLength);
getArrayLength(myArray);
return 0;
}
在C语言中,当数组作为函数参数传递时,它会退化为指针。所以在 getArrayLength
函数内部,sizeof(arr)
获取的是指针的大小(通常在64位系统上为8字节,32位系统上为4字节),而不是数组的真实长度。因此通过 sizeof(arr) / sizeof(arr[0])
得到的结果并不是数组的真实长度。而在 main
函数中,直接对数组 myArray
使用 sizeof
可以得到数组的真实字节数,再除以单个元素的字节数,就能得到数组的真实长度。