有件事我不明白.也许有人能解释一下.

我知道数据处理的标准方法是将引用传递给函数,并更改函数中的数据.这样地:

#include <stdio.h>
#include <stdlib.h>


void function2( float *param) {
    printf("I've received value %f\n", *param);
    (*param)++;
}

int main(void) {
    float variable = 111;

    function2(&variable);
    printf("variable %f\n", variable);
    return 0;
}

使用(&amp;variable)调用function2时,我希望该函数可以更改数据.

但为什么这也能奏效呢?

#include <stdio.h>
#include <stdlib.h>


void function2( float &param) {
    printf("I've received value %f\n", param);
    (param)++;
}

int main(void) {
    float variable = 111;

    function2(variable);
    printf("variable %f\n", variable);
    return 0;
}

据我所知,在调用function2(variable)时,"variable"值的副本会传递给函数.但是,在函数调用之后,"variable"的值发生了变化.

在阅读这样的代码时,无论函数内部发生什么,我都不会期望"variable"的数据发生变化.

推荐答案

这个参数的声明

void function2( float &param) {

这是不正确的.在C中没有参考.这样的函数声明在存在引用的C++中是有效的.

在C++中,当函数被调用时

function2(variable);

变量的两个副本均未创建.函数引用main中声明的原始变量.

C++相关问答推荐

C限制限定符是否可以通过指针传递?

常数函数指针优化

如何使用Python C API实现多线程程序?

在struct中调用函数,但struct在void中 *

从组播组地址了解收到的数据包长度

减法运算结果的平方的最快方法?

Clang:如何强制运行时错误的崩溃/异常由于-fsanitize=undefined

struct 上的OpenMP缩减

致命:ThreadSaniizer:在Linux内核6.6+上运行时意外的内存映射

是否可以使用指针算法在不对齐的情况下在 struct 中相同类型的字段的连续序列之间移动?

如何使用指向 struct 数组的指针并访问数组中特定索引处的 struct

SSH会话出现意外状态

为什么此共享库没有预期的依赖项?

GTK函数调用将完全不相关的char* 值搞乱

如何使用唯一数字对整型进行分区

为什么realloc函数在此代码中修改变量?

为什么我的半数组测试和奇数组测试不起作用?(我使用Assert进行调试)

共享内存未授予父进程权限

使用 GCC 将一个函数中初始化的 struct 体实例通过指针传递到 C 中的另一个函数会产生不同的结果

C 预处理器中的标记分隔符列表