我完全不知道以下两个示例之间有什么区别:
void function(int *p) {
p++;
}
int main() {
int values[] = {1,2,3};
int *p = values;
function(p);
cout << *p;
return 0;
}
这个返回“1”。
而稍作修改会产生“2”(这是想要的结果):
int main() {
int values[] = {1,2,3};
int *p = values;
p++;
cout << *p;
return 0;
}
问题出在哪里?是引用传递还是递增?
最佳答案
这里的问题是
void function(int *p) {
p++;
}
正在使用按值传递 - 而不是按引用传递。由于指针是按值传递的,因此您对指针本身所做的任何更改都不会反射(reflect)在调用站点中。如果您需要修改指针指向的位置,则需要通过引用传递它
void function(int*& p) {
p++;
}
现在,当您递增时,它将指向第二个元素,就像您在第二个示例中所做的那样。
关于c++ - 通过数组移动指针 - 通过引用或递增传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38789464/