我正在尝试计算 C 中数组的大小。
我的第一个实现是基于 this question 已接受的答案:
int size = sizeof(arr)/sizeof(arr[0]);
但这总是给了我一个。我尝试这样做:
int size = sizeof(arr);
无论数组的大小如何,这每次都会给我 4。
这是我使用的代码的最小示例。
void findSize(int arr[]) {
int size = sizeof(arr);
printf("%d\n",size);
}
int main(int argc, char** argv) {
int arr[] = {4,6,9,2,6,3,7,2,5,1,2};
findSize(arr);
}
无论我使用什么数组,此代码始终打印 4。
为什么打印 4,如何找到数组的实际大小?
最佳答案
您的:
void findSize(int arr[]) {
相当于:
void findSize(int arr[3424]) {
这与:
相同void findSize(int *arr) {
因此 findSize
中的 sizeof(arr)
计算指针的大小。
在 C99 中,您可以执行此操作 ( read more about it here ):
void findSize(int n, int arr[n]) {
但即使在这种情况下,sizeof(arr)
也会返回指针的大小。
为什么?因为数组变量会自动衰减为指向其第一个元素的指针。
更新:C99 中的参数错误,sizeof
仅适用于函数体中声明的可变长度数组。感谢@rslemos。下标可以正确地推进嵌套数组的指针, see example .
关于c - 查找数组大小时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24538641/