我对以下函数的理解是它要求一个整数变量的地址。
void MyFunction(int & myParameter)
但是例如在我的代码中,我有:
int myVar;
myFunction(&myVar)
我收到一个编译器错误消息:没有从'int *'到'const int&'的已知转换。
当我传递不带“&”的“ myVar”时,编译器很高兴。我有点困惑,这是怎么回事。在这种情况下,指针符号“ *”和地址符号“&”又有什么区别?我什么时候应该使用?c和c ++在使用'&'时有区别吗?提前致谢。
只需致电myFunction (myVar)
。然后,编译器将通过引用传递您的变量,这意味着,如果您在函数中更改该变量,则该变量也将在函数外部更改。
至于*
和之间的区别&
。如果您有某种类型的变量(将其设为int),并且想要获取其指针,则可以使用运算符来应用获取地址&
:
int i;
int* pointer_to_i = &i;
如果您的函数采用int*
,则需要传递&i
或pointer_to_i
(它们显然是同一件事)。如果您的函数使用int
或int&
,那么您应该通过i
。
以值作为参数的函数(如void f(int);
)处理其参数的副本。该函数对该参数所做的所有更改在外部都不可见。如果函数通过指针或引用获取其自变量,则对该自变量进行的所有更改都将在外部可见。
当获得指针作为参数时,您需要:
NULL
C或nullptr
C ++中*i = 0
将零放入所指向的内存中i
。除此之外,通过指针(如void f(int*){…}
)或通过引用(如void f(int&){…}
)传递实际上仅在语法上有所不同,并且具有相同的含义。
指针不能指向任何地方,可以指向另一个值。相反,引用始终指向某些内容,并且始终指向相同的存储位置。
简而言之。但是您应该真正阅读一些不错的C ++书,其中有许多带有引用或指针的棘手案例。
最后是一条记忆规则。
int i; //< that's a plain number
int* pi = &i; //< that's a pointer to int
int (*pi_2) = &i; //< the same pointer to int
int j = *pi_2; //< here *pi_2 is again an int just as above
就是说,这个指示指针的星号可以放在变量之前,从而从其类型“剥离”一个间接级别。形式上的解释并不十分正确,但有时可以方便地理解会发生什么。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句