关于全局变量和局部变量的区别
这个问题的思考源于一个很简单的算法实例——二分搜索。代码如下:
int binarySearch(int a[],int x, int n)
{
int left = 0;
int right = n - 1;
int i = 0;
while (left <= right)
{
int middle = left + (right - left) / 2;//防止溢出
if (x == a[middle])
{ return middle;};
if (x > a[middle])
left = middle + 1;
else
right = middle - 1;
i++;
};
return -1;
};
其中高亮字段中的middle作为局部变量在while循环结构体之内时,程序正常运行。但当该语句中的middle作为全局变量在while之前时,程序陷入了死循环。通过停点检查发现,当middle作为全局变量时,middle= left + (right - left) / 2不变且这里的left和right都是初始值。
由此可以直观的看出全局变量和局部变量的区别,即当变量a的数值变化有赖于循环体时,应当把它作为局部变量。