Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
88 views
in Technique[技术] by (71.8m points)

c++ - How to change the address of a pointer of a parameter in a function?

I created a function to change the value of *a, but it remains unchanged after the function fun has been executed.

Here's my code.

#include<iostream>
using namespace std;
void fun(int *b){
    int *c = new int;
    *c = 4;
    b = c;
}
int main(){
    int *a = new int;
    *a = 2;
    fun(a);
    cout << *a << endl; // the output is 2 but I want it be 4
    return 0;
}

I want *a be 4 in function fun

question from:https://stackoverflow.com/questions/65622928/how-to-change-the-address-of-a-pointer-of-a-parameter-in-a-function

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

There's two ways, first the C++ way is to have a mutable (non-const) reference:

void fun(int& b) {
   b = 4;
}

// Calling
int x = 0;
fun(x);

Then the classic C way is to use a regular pointer:

void fun(int* b) {
   *b = 4;
}

// Calling
int x = 0;
fun(&x);

The reference approach is better because there's less syntax chaff both in calling the function, and in the function's implementation. There's also no risk you might get nullptr, a reference will be defined.

Note: Your use of new here has unintended consequences, like leaking memory. When you allocate with new you are responsible for releasing that memory.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...