簡體   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