C中Sizeof的行为

Pri*_*pal 6 c arrays sizeof

我已经了解到,当我们将数组名称传递给sizeof时,数组的名称不会衰减到指向基址的指针.下面的代码通过给出答案10来验证这一事实.

#include <stdio.h> 

int main(){  
    int arr[10];  
    printf("Size of array is %d" , sizeof(arr)/sizeof(int));  
    return 0;  
}
Run Code Online (Sandbox Code Playgroud)

然而,当我运行下面的代码时,答案是1.无论维度是否是原型编写,答案都是1.为什么会这样?

#include <stdio.h>

void dimension(int arr[]){  
    printf("Sizof array is %d" , sizeof(arr)/sizeof(int));  
}


int main(){  
    int arr[10];  
    dimension(arr);  
    return 0;  
}  
Run Code Online (Sandbox Code Playgroud)

unk*_*ulu 6

这个签名

void dimension(int arr[])
Run Code Online (Sandbox Code Playgroud)

完全等同于

void dimension(int *arr)
Run Code Online (Sandbox Code Playgroud)

另见问题6.4


lit*_*adv 5

因为您传递了一个未知大小的数组,该数组等效于此上下文中的指针。sizeof是在编译时而不是运行时计算的。