c++ - 通过数组移动指针 - 通过引用或递增传递?

标签 c++ arrays pointers pass-by-reference increment

我完全不知道以下两个示例之间有什么区别:

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/

相关文章:

c++ - 在 C++ 中强制执行 NULL 检查

c++ - 部分易失变量?

php - 如何在http get请求中发送数组

C++ - *p vs &p vs p

arrays - Elm - 更新列表中的元素

java - 如何向用户显示数组

C:使用指针时如何分配内存?

c++ - Lua 比 C/C++ 更适合的示例用法

c++ - 无法将焦点设置到 CEdit 控件

C++ 前向声明混淆