c语言sizeof求数组长度出错

为什么这个调试用sizeof在这里发生了错误
我是用int a[1]={5}来试的

img

#include<stdio.h>
int left_bound(int nums[],int target){
    int length_nums=sizeof(nums)/sizeof(nums[0]);
    if(length_nums==0)  return -1;
    int left=0;
    int right=length_nums;    //右开区间
    
    while(left<right)    //因为是左闭右开区间,若left=right查找结束 
    {
        int mid=(left+(right-left))/2;//防止溢出 
        if(nums[mid]==target)  right =mid;//要找到右侧相等的数 如上图 
                                          //原来写法是return mid; 
        else if(nums[mid]<target)  left=mid+1;
        else if(nums[mid]>target)  right =mid; 
     }
     
     if(left==length_nums||nums[left]!=target)  return -1;  //     检查出界情况     
     return left;    //退出的时候left=right 
     
}
int main(){
    int a[1]={5};
    printf("%d",left_bound(a,5));
    
}


当然会出错,如果你去调试你就会发现你的length不会等于数组的长度!
那是因为你函数传进来的数组会退化为指针,也就意味着sizeof计算的是指针的大小,而非整个数组的大小
length的计算最好放在主函数,算出了后再将length传入要用的函数。
一定要学会如何调试!非常重要