关于C++指针和引用,需要澄清

Jam*_*sev 6 c++ pointers reference

请问以下是什么错误?

我的理解是指针表示某种类型的某个地址.

所以,int i = 18指向它的指针是int *pI = &i;

以下2个声明有效

void foo (int &something) // Will accept an address of something
void bar (int *something) // Will accept a pointer to something
Run Code Online (Sandbox Code Playgroud)

当我们声明一个函数时

void bar (int *something)
Run Code Online (Sandbox Code Playgroud)

我们最好发送指向某事物的指针.确实,foo(pI)有效.

按照相同的逻辑,看着

void foo (int &something)
Run Code Online (Sandbox Code Playgroud)

我们应该发送一个指向int作为参数的东西的地址,然后:

为什么foo(&i)错了?

das*_*ght 5

void foo (int &something) // Will accept an address of something

这是不正确的:int&是一个引用,一个与某些方面的指针类似的概念,但完全不相同.

引用类似于指针,因为可以通过引用更改值,就像可以通过指针更改一样.但是,没有"null引用"这样的东西,而NULL指针非常常见.

当您调用带引用的函数时,您只需将变量传递给您正在使用的引用 - 不需要&运算符:

void foo (something); // "something" must be a variable
Run Code Online (Sandbox Code Playgroud)