c++ - & 和 * 作为参数的区别

标签 c++

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

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

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

你能不能同时调用:

float pow = 3.0f;

foo(&pow);

float* pow = 3.0f;

foo(pow);

最佳答案

  • 指针可以是NULL,而引用不能。如果您出于任何原因需要传递一个 NULL 对象,这会很有用。

  • 使用指针语法,您可以在调用函数时传递一个指针。使用引用,您只需传递变量:

    refer(float& bar) {}
    point(float* bar) {}
    
    float afloat = 1.0f;
    
    refer(afloat);
    point(&afloat);
    

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

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

    foo(float& bar)
    {
        bar = 3.0f;
    } 
    
    // versus
    
    foo(float* bar)
    {
        *bar = 3.0f;
    }
    

关于c++ - & 和 * 作为参数的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7676878/

相关文章:

c++ - undefined symbol __istype with/opt/local/bin/g++?

c++ - 从 int 到 char,逐字节发送

c++ - CUDA opencv 构建失败 - 缺少实际存在的文件

C++ 构造函数,一个用于度数,一个用于弧度

c++ - 在 Ruby 上调用 Dll(不是 Windows API)

C++11 是否所有的控制路径都需要返回值?

c++ - 如何将整数参数传递给 shell 脚本,然后将其传递给程序?

c++ - 为什么捕获变量会使 lambda 的类型唯一?

c++ - 给char/unsigned char赋值

c++ - 使用 SFINAE 检测模板方法