我应该编写一个包含20个整数的数组的程序,它需要调用一个使用线性搜索算法定位一个值的函数,另一个调用使用二进制搜索算法定位相同值的函数。这两个函数都需要记下进行比较的次数并显示它们。
我需要使用以下原型:
int linearSearch(const int arr[], int size, int value)
int binarySearch(const int array[], int numElems, int value)
一旦我编译了程序,我会收到一条警告,指出
已设置变量“ position1”但未使用”。
我已经初始化了变量,但是找不到问题。
//Function for linear search
int linearSearch(const int arr[], int size, int value)
{
int index = 0;
int position1 = -1;
bool found = false;
int counter1 = 0;
while( index < size && !found)
{
if(arr[index] == value)
{
found = true;
position1 = index;
}
index ++;
counter1++;
}
return counter1;
}
答案 0 :(得分:1)
编译器是正确的。您实际上从未使用过position1
。让我们看一下您访问position1
的所有位置:
//Function for linear search
//int linearSearch(const int arr[], int size, int value)
//{
// int index = 0;
int position1 = -1;
// bool found = false;
// int counter1 = 0;
//
// while( index < size && !found)
// {
// if(arr[index] == value)
// {
// found = true;
position1 = index;
// }
// index ++;
// counter1++;
// }
// return counter1;
//}
您初始化position1
的值,然后为其分配一个由position1 = index;
计算的可能有意义的值
现在告诉我:您在哪里读取position1
的值?
在函数中,您实际上没有读取position1
的值,也没有返回它的值。实际上,它的值可以是100000000
或-2
,由于您从不读取该值,因此程序的行为相同。实际上,您可以完全删除该变量,并且您的程序仍然会完全一样!
编译器知道,因为position1
是局部变量。变量position1
的范围仅在函数内。
答案 1 :(得分:0)
编译器只是让您知道您已声明一个未被使用的变量。该程序仍然可以编译,因为它是警告,而不是编译时或运行时错误。