我在这里用C ++编码。
int main()
{
int setAcapacity = 10;
int setANOE = 0;
int *setA;
createSet(&setA, setAcapacity);
}
void createSet(int **set, int n)
{
*set = new int[n];
}
有人可以解释一下通过引用传递给createSet函数的原因吗?谢谢!!
答案 0 :(得分:3)
首先,您不通过引用传递,而是通过指针传递!
通过引用看起来像这样:
int createSet(int*& set, int n)
// ^ reference to pointer
{
set = new int[n]; // assign to referenced value
}
createSet(setA, setAcapacity);
// ^ no need to take address
您希望通过引用或指针传递的原因有两个:
const
引用或指向const
的指针。setA
,并通过指针将其传递给名为set
的指针。答案 1 :(得分:0)
您在int createSet(int **set, int n)
中所做的操作是将指针传递给指针;不是对指针的引用。要传递参考:int createSet(int * & set, int n)
。
如果通过引用传递,您的代码将如下所示:
void createSet(int * & set, int n) // '&' for reference
{
set = new int[n];
}
int main()
{
int setAcapacity = 10;
int setANOE = 0;
int *setA = nullptr; // Better to initialize
createSet(setA, setAcapacity);
}
对于您的问题:传递指针/引用和传递值之间的区别在于,对调用的函数中的指针/引用传递的参数进行的修改在调用函数中有效,而对在调用函数中按值传递的参数不会影响调用函数。您的情况下的#value#是:#int-pointer#。
您将指针/引用传递给#value#,因为您希望赋值定位到调用函数main()的setA
。因此,您还要在原始代码中传递setA
的地址。因此new
可以将新指针存储在该地址中。
此外,在许多情况下:传递引用比传递值更有效,因为它不会复制参数。形式参数是该参数的别名。当被调用函数读取或写入形式参数时,实际上就是对参数本身的读取或写入。