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

时间:2012-08-07 01:47:58

标签: 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

当我们将函数声明为

void bar (int *something)

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

遵循相同的逻辑,看着

void foo (int &something)

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

为什么foo(&i)错了?

5 个答案:

答案 0 :(得分:5)

  

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

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

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

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

void foo (something); // "something" must be a variable

答案 1 :(得分:2)

声明void foo (int &something)需要reference variable,而不是指针。

除非void foo (int something)passed by reference,而非by value,否则您拨打的电话与something完全相同。

答案 2 :(得分:0)

  

void foo(int& something)//接受某个地址

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

要调用该功能,您无需执行任何特殊操作。

int i = 10;
foo(i);  // passed to foo by reference

答案 3 :(得分:0)

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

void foo (int &something)

实际上是指定应该传递一个整数引用类型,所以你只需要调用这个函数:

foo(i);

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

答案 4 :(得分:0)

&两个的不同含义。

第一种是从现有变量创建指针。

第二个是参考。

尽管它们都使用相同的角色,但它们是两个完全不同的东西。