如何在c ++中使用'&'符号传递参数

MIb*_*rah 0 c++

我对以下函数的理解是它要求整数变量的地址.

void MyFunction(int & myParameter)
Run Code Online (Sandbox Code Playgroud)

但在我的代码中,我有:

int myVar;
myFunction(&myVar)
Run Code Online (Sandbox Code Playgroud)

我收到编译器错误说:没有已知的从'int*'到'const int&'的转换.

当我没有'&'传递'myVar'时,编译器很高兴.我有点困惑,这里发生了什么.在此上下文中,指针符号'*'和地址符号'&'之间有什么区别?我什么时候应该使用?使用'&'时c和c ++之间是否有区别?提前致谢.

glu*_*k47 9

打电话吧myFunction (myVar).然后编译器将通过引用传递您的变量,这意味着,如果您在函数中更改该变量,则此变量也将在函数外部更改.

至于*和之间的区别&.如果你有一个类型的变量(让它是int)并且你想得到它的指针,你可以使用运算符应用获取地址&:

int i;
int* pointer_to_i = &i;
Run Code Online (Sandbox Code Playgroud)

如果你的函数需要int*,那么你需要传递一个&ipointer_to_i(它们显然是同一个东西).如果您的函数采用intint&,那么您应该通过i.

通过值(如void f(int);)获取其参数的函数处理其参数的副本.此函数对此参数所做的所有更改在外部都不可见.如果函数通过指针或引用获取其参数,则对参数所做的所有更改都在外部可见.

当您将指针作为参数时,您需要:

  1. 检查它是不是NULL在C或nullptrC++中
  2. 取消引用它.也就是说,你应该写入*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
Run Code Online (Sandbox Code Playgroud)

也就是说,这个指示指针的星号可以预先添加到变量中,从而从其类型中"剥离"一个间接级别.这种解释在形式上并不完全正确,但有时候很容易理解会发生什么.


unw*_*ind 5

你的理解是不正确的.这是一个参考.

你这样称呼它:

myFunction(myVar);
Run Code Online (Sandbox Code Playgroud)

在函数内部,myParameter将是相同的myVar,不像普通函数调用(没有&),其中myParameter将是一个的副本myVar.

C中不存在引用参数,你必须使用指针参数(int *myParameter).

所以,&在参数列表中并不意味着"指针",它意味着参考.