C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C++  float、float*、float& 区别

C++ 函数形参中 float、float*、float& 的区别详解

作者:INS_KF

这篇文章介绍C++ 函数形参中 float、float*、float& 的区别,本文通过对比表格和代码示例,清晰讲解三者的传递机制、能否修改实参、语法要求及安全性差异,帮你根据场景选择最合适的传参方式,避免常见错误,感兴趣的朋友一起看看吧

核心区别在于传递机制、是否可修改实参、语法要求及安全性:

表格

形参类型传递方式能否修改实参值调用写法空值检查拷贝开销
float传值(拷贝)❌ 否(仅改副本)func(a)无需有(4 字节)
float*传指针(拷贝地址)✅ 是(通过 *ptr)func(&a)✅ 需判空(可为 nullptr)有(指针大小,通常 8 字节)
float&传引用(别名绑定)✅ 是(直接操作原对象)func(a)❌ 不可为空(必须绑定有效对象)无(零拷贝)

关键行为说明

💡 实践建议:

1.float value:值传递

void func(float value);

调用:

float a = 10.0f;
func(a);

特点:

2.float *value:指针传递

void func(float *value);

调用:

float a = 10.0f;
func(&a);

函数内部:

void func(float *value)
{
    *value = 20.0f;
}

执行后:

a == 20.0f;

特点:

例如:

void sendData(uint8_t *data, int len);

3.float &value:引用传递

void func(float &value);

调用:

float a = 10.0f;
func(a);

函数内部:

void func(float &value)
{
    value = 20.0f;
}

执行后:

a == 20.0f;

特点:

4. 三种方式对比

写法含义能否修改原变量调用方式
float value值传递否func(a)
float *value指针传递是func(&a)
float &value引用传递是func(a)

5. 实际选择原则

只需要读取基本类型

使用:

void func(float value);

需要修改调用者的变量

优先考虑引用:

void calculateValue(float &value);

需要传递地址、数组或缓冲区

使用指针:

void processData(uint8_t *data, int len);

大型对象只读取

通常使用 const 引用:

void func(const QString &str);
void func(const MyStruct &data);

这样既可以避免对象复制,又可以防止函数修改原数据。

6. 最简单的记忆方法

只读取一个基本类型
    → float value
需要修改原变量
    → float &value
需要地址、数组、缓冲区、允许 nullptr
    → float *value
大型对象只读取
    → const Type &value

另外需要特别区分:

void func(float &value);

这里的 & 表示引用。

而:

float a = 10.0f;
func(&a);

这里的 &a 表示取得变量 a 的地址。

两者虽然都使用 &,但含义不同。

到此这篇关于C++ 函数形参中 float、float*、float& 的区别详解的文章就介绍到这了,更多相关C++ float、float*、float& 区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文