6

请问以下哪项是错的?

我的理解是指针代表某种类型的地址。

所以, 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

当我们将函数声明为

void bar (int *something)

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

遵循相同的逻辑,当查看时

void foo (int &something)

我们应该向它发送一个指向 int 的地址作为参数,那么:

为什么foo(&i)错了?

4

5 回答 5

5

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

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

引用类似于指针,因为可以通过引用更改值,就像可以通过指针更改值一样。但是,没有“空引用”之类的东西,而 NULL 指针很常见。

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

void foo (something); // "something" must be a variable
于 2012-08-07T01:51:13.930 回答
2

声明void foo (int &something)采用引用变量,而不是指针。

您调用它的方式与调用它的方式完全相同void foo (int something),只是它something通过引用而不是传递的。

于 2012-08-07T01:51:54.850 回答
0

void foo (int &something) // 将接受某物的地址

不,虽然我能理解这种困惑。该函数引用. int在定义良好的程序中,引用保证不为空。它在概念上类似于指针,但在语义上不同。

要调用该函数,您不需要做任何特别的事情。

int i = 10;
foo(i);  // passed to foo by reference
于 2012-08-07T01:52:09.420 回答
0

因为在 C++ 中,&表示函数原型上下文中的“引用类型”,因为您在这里使用它。你的功能:

void foo (int &something)

实际上是指定应传递整数引用类型,因此您只需像这样调用此函数:

foo(i);

请注意,在这种情况下,您仍然将i的地址传递给函数,但您将其作为引用类型而不是原始指针。

于 2012-08-07T01:53:02.703 回答
0

There are two different meanings for &.

The first is to create a pointer from an existing variable.

The second is to make a reference.

Even though they both use the same character, they are two completely different things.

于 2012-08-07T01:54:09.260 回答