有int的时候如何将指针传递给int?

时间:2016-05-24 20:30:56

标签: c++ pointers

我有一个代码:

void fun1(int ** i) {
 *i = new int(0);
}
void fun2(int *& i) {
    i = new int(69);
}
int main()
{
    using namespace std;
    int a = new int(42);
    fun1(&a);
    cout << "fun1" << a << endl;

    fun2(&a);
    cout << "fun2" << a << endl;
}

我想通过&#34; a&#34;到函数fun1和fun2。我可以在不创建指向指针的指针的情况下执行此操作吗?我可以通过&#34; a&#34;不知何故?

4 个答案:

答案 0 :(得分:2)

其中一个函数采用指向指针的指针:

void fun1(int ** i)

另一个接受指针的引用:

void fun1(int *& i)

在没有指针变量的情况下调用它们是没有意义的,因为这些函数的主要效果(最有可能)是更改地址传递的指针(通过引用传递,作为指针或引用)指向它以便它可以是由来电者使用。

让我们假设以下内容可行

int a;
fun1(&(&a));

该功能会改变地址&#34;临时&#34; (&a是指向int的指针),但你无法访问它。

答案 1 :(得分:1)

所有int a = new int(42);中的第1个错误,操作符new在堆上创建对象并返回指向新创建的对象的指针。您正尝试将其分配给int。最好它应该看起来像int* a = new int; *a = 42;,那时你的代码负责删除它 现在,如果你有一个像func(int* pA) {}这样的函数,并且有一个像int a = 42;这样的局部变量,并且想要将它传递给你的函数,你可以将你的函数称为func(&a);
第二,你的功能都在造成内存泄漏。您正在创建一个永不删除的新指针 如果你想改变你的函数中a的值,你需要的就是这样:

void func1(int* pA)
{
   *pA = 42;
}

或者您可以这样做:

void func2(int& rA)
    {
       rA = 42;
    }

我认为你还没有理解指针和引用的含义。

答案 2 :(得分:0)

要获得没有指针的引用,只需执行foo(int &a) {a = 43}并调用此函数:foo(a)

答案 3 :(得分:0)

运算符new返回指针,因此您必须编写int* a = new int(42);。您可以按如下方式调用函数:

fun1(&a);
fun2(a);

并且不要忘记用新的删除已分配的内存:

#include <iostream>
void fun1(int ** i)
{
    delete *i;
    *i = new int(0);
}
void fun2(int *& i)
{
    delete i;
    i = new int(69);
}
int main()
{
    using namespace std;
    int *a = new int(42);
    fun1(&a);
    cout << "fun1: " << a << endl;
    fun2(a);
    cout << "fun2: " << a << endl;
    delete a;
}