繁体   English   中英

使用指针比较数组中的元素(C ++)

[英]Comparing elements in the array by use of pointers (C++)

我正在创建功能compare_arrays,以检查预定义数组中的元素是否相似。 我想使用指针,并通过引用将数组传递给函数。 这是我到目前为止编写的函数,但是pylint在第二个if循环中给我一个错误,指出未定义* 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++) {

现在,您可以像这样简单地在main中调用代码:

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

但是,您可以使用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 equal\n";
}

您将compare_arrays函数主体放置在main函数内部。 从主体中删除函数主体,然后从主体函数内部调用它。 另外,将分号放在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;

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM