提问者:小点点

将指针作为函数参数传递


我正在传递一个指向函数的指针,意图修改保存在原始地址的数据。

#include<bits/stdc++.h>
using namespace std;
void square(int **x)
{
    **x = **x + 2;
    cout<<**x<<" ";
}
int main()
{
    int y = 5;
    int *x = &y;
    cout<<*x<<" ";
    square(&x);
    cout<<*x<<" ";
    return 0;
 }

我可以使用以下代码获得所需的输出,即5 7 7

只是想知道是否有一个更好的/易于阅读的方式来处理这个问题。


共2个答案

匿名用户

如果只想通过函数中的参数对实参执行修改,则可以使它按引用传递(pass-by-reference)。

void square(int& x)
{
    x = x + 2;
    cout<<x<<" ";
}
int main()
{
    int y = 5;
    cout<<y<<" ";
    square(y);
    cout<<y<<" ";
    return 0;
}

如果您只有指针,您仍然可以像@CDHowie建议的那样通过运算符*获取指向的对象。

或者按指针传递就足够了,那么您就不需要中间指针对象x来传递到函数。 即不需要像代码显示的那样使用指针到指针。

void square(int* x)
{
    *x = *x + 2;
    cout<<*x<<" ";
}
int main()
{
    int y = 5;
    cout<<y<<" ";
    square(&y);
    cout<<y<<" ";
    return 0;
}

匿名用户

#include <iostream>
using namespace std;
void square(int *x)
{
    *x = *x + 2;
    cout << *x << " ";
}

int main()
{
    int y = 5;
    cout<< y <<" ";
    square(&y);
    cout<< y << " ";
    return 0;
}

根据您提供的示例代码,您不需要双重间接。 只需传递一个指针,而不是指向一个指针的指针。 或者,使用按引用传递。