int ** a 和 int & a 在函数中传递值的区别
Difference between passing value in function by int ** a and int & a
如果我在任何函数中传递 int **a
并且在同一位置传递 int& a
是否有任何区别,两者都会产生任何区别吗?
例如
Bool issafe(int**arr, intx, int y)
Bool issafe(int& arr, intx, int y)
'*' 符号和 '&' 符号之间有很多区别。
让我们从一般意义上和一些技术细节上看一下两者的含义。
引用运算符 (&)
&x
仅表示 x 的地址。它将是一个地址值,通常以十六进制表示法表示。
在函数中常用于引用传递:
func(int &x, char a);
这将通过引用传递 x
,但通过值传递 a
。
取消引用运算符 (*)
*p
表示指向内存地址的指针。
我们可以使用以下格式为该指针分配一个地址:
int *p = x
或
int *p; p = &x
一旦指针指向一个地址,*p
和 x
就可以在程序的其余部分互换使用。
双重取消引用
当我们需要一个指向指针的指针时,就会使用**
。
例如,如果我们需要制作一个二维数组,我们可以使用**
符号。
一个指针指向矩阵中第一行的第一个元素,而另一个指针指向行列表第一行.
因此,用几句话来回答你的问题:
是的,int ** a
和 int & a
有很大的不同,以至于它们比 *
和 &
.
这样的对立更上一层楼
如果我在任何函数中传递 int **a
并且在同一位置传递 int& a
是否有任何区别,两者都会产生任何区别吗?
例如
Bool issafe(int**arr, intx, int y)
Bool issafe(int& arr, intx, int y)
'*' 符号和 '&' 符号之间有很多区别。
让我们从一般意义上和一些技术细节上看一下两者的含义。
引用运算符 (&)
&x
仅表示 x 的地址。它将是一个地址值,通常以十六进制表示法表示。
在函数中常用于引用传递:
func(int &x, char a);
这将通过引用传递 x
,但通过值传递 a
。
取消引用运算符 (*)
*p
表示指向内存地址的指针。
我们可以使用以下格式为该指针分配一个地址:
int *p = x
或
int *p; p = &x
一旦指针指向一个地址,*p
和 x
就可以在程序的其余部分互换使用。
双重取消引用
当我们需要一个指向指针的指针时,就会使用**
。
例如,如果我们需要制作一个二维数组,我们可以使用**
符号。
一个指针指向矩阵中第一行的第一个元素,而另一个指针指向行列表第一行.
因此,用几句话来回答你的问题:
是的,int ** a
和 int & a
有很大的不同,以至于它们比 *
和 &
.