You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

循环内重复定义变量是否合法?以C语言二分查找代码为例

循环内定义变量是否属于重定义?

先看你给出的二分查找代码:

int binarySearch(int a[],int b, int c)
{
    int start=0,end=b-1;
    while(start<=end)
    {
        int mid=start+(end-start)/2;
        if(a[mid]==c)
            return mid;
        else if(a[mid]>c)
            end=mid-1;
        else
            start=mid+1;
    }
    if(start>end)
        return -1;
}

核心问题解答

这段代码里的mid定义不属于重定义,完全合法。

原因在于C/C++的块级作用域规则:while循环的{}是一个独立的块作用域。每次循环迭代时:

  • 进入块时,新的mid会被定义并初始化;
  • 当循环执行到块的右大括号}时,当前迭代的mid会被销毁,内存也会被释放;
  • 下一次循环开始,会在全新的块作用域里重新定义mid,和上一轮的mid是完全独立的两个变量,不存在“重复定义”的冲突。

你之前认知里的“变量重定义非法”,指的是同一个作用域内重复定义同名变量的情况,比如在函数最外层连续写:

int mid;
int mid; // 这才是非法的重定义

额外小优化提示

代码最后那个if(start>end)的判断是多余的——while循环的退出条件就是start>end,直接写return -1;就行,没必要多此一举。

内容的提问来源于stack exchange,提问作者baadal51

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 19:25:28