如何使用指针函数来编写/读取数组

时间:2017-06-01 20:09:15

标签: c++ arrays

我正在使用此函数迭代任何数组:

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)

2 个答案:

答案 0 :(得分:4)

您的函数指针签名

void (*pointer) (int, int)

是一个函数,它取两个整数按值,并且不返回任何内容。这意味着该函数将接收每个参数的副本,因此当函数结束时,您对变量所做的任何更改都将丢失。

相反,您需要通过引用传递第二个int参数,如

void (*pointer) (int, int&)

并更改您的setCode()showCode()功能以匹配。

答案 1 :(得分:1)

这个int code[len];不是有效的C ++(它是有效的C99)。并且你的set函数不起作用,因为你传递了你想要按值设置的东西,所以你读取的值被丢弃而不存储在数组中。