循环内重复定义变量是否合法?以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
相关产品推荐
相关产品推荐

