&和*之间的差异作为参数

Sir*_*lot 4 c++

以下两种参数类型有什么区别?第一个接受一个指针,它实际上是一个内存地址,第二个也是一个内存地址?

foo(float& bar)
{
    // do stuff
}

foo(float* bar)
{
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

你能不能同时打电话:

float pow = 3.0f;

foo(&pow);
Run Code Online (Sandbox Code Playgroud)

要么

float* pow = 3.0f;

foo(pow);
Run Code Online (Sandbox Code Playgroud)

Ail*_*lyn 12

  • 指针可以是NULL,而引用则不能.如果您NULL因任何原因需要传递对象,这可能很有用.

  • 使用指针语法,在调用函数时传递指针.使用引用,您只需传递变量:

    refer(float& bar) {}
    point(float* bar) {}
    
    float afloat = 1.0f;
    
    refer(afloat);
    point(&afloat);
    
    Run Code Online (Sandbox Code Playgroud)

    这意味着使用指针语法时,必须在调用函数时传递指针.使用引用语法,您不知道函数是通过引用还是通过值来获取它而不查看函数定义.

  • 使用引用语法,您不必取消引用函数中的指针,并在您的// do stuff部分中更自然地使用它 .

    foo(float& bar)
    {
        bar = 3.0f;
    } 
    
    // versus
    
    foo(float* bar)
    {
        *bar = 3.0f;
    }
    
    Run Code Online (Sandbox Code Playgroud)