为什么函数不会改变原始变量?

时间:2017-04-30 16:46:36

标签: c++

为什么我运行以下代码时输出3而不是5?我的印象是传递指向函数的指针会改变原始变量。

#include <iostream>
using namespace std;
void addTwo(int* b){
    b +=2;
}

int main() {
    int a = 3;
    int* ptr = &a;
    addTwo(ptr);
    cout<<*ptr<<endl;
    return 0;
}

2 个答案:

答案 0 :(得分:3)

您需要在b指向的内容中添加两个。你正在做的是递增指针。你需要增加* b:

#include <iostream>
using namespace std;
void addTwo(int* b){
    *b +=2;
}

int main() {
    int a = 3;
    int* ptr = &a;
    addTwo(ptr);
    cout<<*ptr<<endl;
    return 0;
}

答案 1 :(得分:0)

#include <iostream>
using namespace std;
void addTwo(int& b){
    b +=2;
}

int main() {
    int a = 3;
    addTwo(a);
    cout<<a<<endl;
    return 0;
}

首先,您应该使用C ++中的引用而不是指针。从长远来看,它确实更容易。

#include <iostream>
using namespace std;
void addTwo(int* b){
    *b +=2;
}

int main() {
    int a = 3;
    int* ptr = &a;
    addTwo(ptr);
    cout<<*ptr<<endl;
    return 0;
}

第二件事,你只是忘了addTwo()中的*,递增指针地址而不是内容本身。