我正在使用此函数迭代任何数组:
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)
答案 0 :(得分:4)
您的函数指针签名
void (*pointer) (int, int)
是一个函数,它取两个整数按值,并且不返回任何内容。这意味着该函数将接收每个参数的副本,因此当函数结束时,您对变量所做的任何更改都将丢失。
相反,您需要通过引用传递第二个int
参数,如
void (*pointer) (int, int&)
并更改您的setCode()
和showCode()
功能以匹配。
答案 1 :(得分:1)
这个int code[len];
不是有效的C ++(它是有效的C99)。并且你的set函数不起作用,因为你传递了你想要按值设置的东西,所以你读取的值被丢弃而不存储在数组中。