簡體   English   中英

如何使用指針函數寫入/讀取數組

[英]How can I use a pointer function to write/read an array

我正在使用此函數來迭代任何數組:

void iterate(int len, int arr[], void (*pointer) (int, int) ) {
    for (int i = 0; i < len; ++i) {
        pointer(i, arr[i]);
    }
}

但在我的內部功能中:

指針(i,arr [i]);

我無法修改arr [i]並為其分配新值。 這是我的代碼:

void iterate(int len, int arr[], void (*pointer) (int, int) ) {
    for (int i = 0; i < len; ++i) {
        pointer(i, arr[i]);
    }
}

void setCode(int index, int value) {
    cout << "[" << index << "]: ";
    cin >> value;
}

void showCode(int index, int value) {
    cout << index << " ---- " << value << endl;
}

int main() {

    int len;
    cout << "length: ";
    cin >> len;

    int code[len];

    void (*setCodePointer) (int, int) = setCode;
    void (*showCodePointer) (int, int) = showCode;

    iterate(len, code, setCodePointer);
    iterate(len, code, showCodePointer);
}

如果我執行並將長度設置為2

[0]到1和[1]到2

我得到:

0 ---- 1495894288(應為1)

1 ---- 32767(應為2)

您的函數指針簽名

void (*pointer) (int, int)

是一個函數,該函數按value接受兩個整數,並且不返回任何 這意味着該函數將接收其每個參數的副本,因此在函數結束時,對變量所做的任何更改都將丟失。

相反,您需要通過reference傳遞第二個int參數,如

void (*pointer) (int, int&)

並更改setCode()showCode()函數以使其匹配。

int code[len]; 無效的C ++(有效的C99)。 並且您的set函數不起作用,因為您通過值傳遞了要設置的內容,因此讀取的值將被丟棄並且不會存儲在數組中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM