如何正确声明变量

时间:2019-04-01 22:37:08

标签: c++

我应该编写一个包含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;
}

2 个答案:

答案 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)

编译器只是让您知道您已声明一个未被使用的变量。该程序仍然可以编译,因为它是警告,而不是编译时或运行时错误。