1

在第一个函数调用中,我通过引用发送矩阵传递。第二种方法不一样吗?我认为矩阵是默认通过引用传递的。

这是第一个案例:

phi= new double[15]; //phi is a dynamically allocated array

function(double *phi) //calls phi with what SHOULD be default pass by reference

第二种情况:

function(double *&phi) //calls phi with pass by reference?

两者应该没有区别吧?

我问的原因是因为当我忽略“&”符号并尝试在我动态分配它的函数之外为 phi 分配一个值时,我的代码段出错了。

4

2 回答 2

8

在第一种情况下,您的函数声明按值接受指针。

在第二种情况下,您的函数声明通过引用接受指针。您可以更改函数中的指针。

于 2013-05-17T22:10:30.510 回答
1

您似乎误解了“作为参考传递”的含义。当您将变量作为引用传递时,您赋予函数更改变量值的能力。

假设我有一个函数定义为:

doIt(int i)

我这样称呼它:

main()
{
    int a = 2;

    doIt(a);
}

该函数不能更改“a”变量的值。

在您的情况下,您使用的是指针。如果我有以下功能:

doItWithAPointer(int* a)

并这样称呼它:

main()
{
    int a = 2;
    int* pa = &a;

    doItWithAPointer(pa);
}

我现在可以更改“a”的值。为什么?因为我可以通过指针访问它的值。我不能做的是改变实际参数的值,在这种情况下是“pa”,或者换句话说,让它指向另一个地址。

现在,最后,如果我这样声明我的函数:

doItWithAPointerReference(int* &a)

并这样称呼它:

main()
{
    int a = 2;
    int* pa = &a;

    doItWithAPointerReference(pa);
}

我仍然可以通过指针改变“a”变量的值,但我也可以直接改变“pa”的值,因为我有它的引用!

于 2013-05-17T22:24:33.757 回答