草木烟火 2022-11-14 22:37 采纳率: 50%
浏览 28
已结题

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));
    
}


  • 写回答

1条回答 默认 最新

  • 哒咩哒咩橙 2022-11-15 11:02
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月23日
  • 已采纳回答 11月15日
  • 修改了问题 11月14日
  • 创建了问题 11月14日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度