通过使用指针(C )比较阵列中的元素



我正在创建功能,Compare_arrays检查预定义数组中的元素是否相似。我想使用指针并通过引用将数组传递到该功能中。这是我到目前为止编码的函数,但是Pylint为我的第二个循环说明 *Arry1和 *Arry2未定义。有人可以帮助我更好地理解这个错误。

另外,我如何称呼该功能并通过arr_one,arr_two等。

#include <iostream>
using namespace std;
int size1 = 3, size2 = 3;
int arr_one[] = {1, 2, 3};
int arr_two[] = {1, 2, 3};

int main(){
    bool compare_arrays( int *arry1, int size1, int *arry2, int size2);{
        if (size1 != size2){
            return false;
        }
        for(int i=0; i < size1; i++);{
            if (*arry1 != *arry2);{
                return false;
            }
        }
        *arry1++;
        *arry2++;
        return true;
        }
}

代码中最大的主要问题是在compare_arrays结束时包含;。您实际在做的是声明一个函数compare_arrays,然后创建单独的范围,这就是为什么未定义arry1的原因。如果您删除此半彩色,那么您的错误将开始更有意义:

bool compare_arrays( int *arry1, int size1, int *arry2, int size2) {

现在,编译器会告诉您您无法在函数中定义函数,这很容易求解。将compare_arrays移动到main外:

bool compare_arrays( int *arry1, int size1, int *arry2, int size2){
    if (size1 != size2){
        return false;
    }
    for(int i=0; i < size1; i++);{
        if (*arry1 != *arry2);{
            return false;
        }
    }
    *arry1++;
    *arry2++;
     return true;
}
int main() {
}

现在将编译,但可能不会按照您的期望运行,因为您在第二个if语句的结尾处有一个额外的错误半彩色。这意味着半彩色被视为if的表达式,然后您将始终return false;。通过删除半颜色来解决此问题:

for (int i = 0; i < size1; i++) {

现在,您可以像这样单纯地调用您的代码:

int main() {
    if (compare_arrays(arr_one, size1, arr_two, size2)) {
        std::cout << "arrays are equaln";
    }
}

但是,您可以使用std::vector来使整个事情变得琐碎:

#include <vector>
#include <iostream>
int main() {
    std::vector<int> v1 = { 1, 2, 3 };
    std::vector<int> v2 = { 1, 2, 3 };
    if (v1 == v2)
        std::cout << "arrays are equaln";
}

您将Compare_Arrays功能主体放在主函数中。将函数的主体删除,然后从主函数内部调用它。另外,您将半彩色放在IF语句和功能标题之后,这是错误的。您的代码应该像这样

  #include <iostream>
using namespace std;
int size1 = 3, size2 = 3;
int arr_one[] = { 1, 2, 3 };
int arr_two[] = { 1, 2, 3 };
bool compare_arrays(int *arry1, int size1, int *arry2, int size2) {
    if (size1 != size2) {
        return false;
    }
    for (int i = 0; i < size1; i++) {
        if (*arry1 != *arry2) {
            return false;
        }
    }
    *arry1++;
    *arry2++;
    return true;
}
int main() {
    cout << compare_arrays(arr_one, size1, arr_two, size2) << endl;
}

最新更新