c - "C"函数内的数据操作

标签 c pointers reference pass-by-reference function-declaration

这里有一些我不明白的地方。也许有人可以阐明它。

我知道数据操作的标准方法是传递对函数的引用并更改函数中的数据。像这样:

#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;
}

当用 (&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”值的副本被传递给函数。但是尽管如此,“变量”的值在函数调用后发生了变化。

当阅读这样的代码时,无论函数内部发生什么,我都不会期望“变量”的数据发生变化。

最佳答案

这个参数的声明

void function2( float &param) {

不正确。在 C 中没有引用。这样的函数声明将在存在引用的 C++ 中有效。

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

function2(variable);

没有创建变量的副本。该函数引用在 main 中声明的原始变量。

关于c - "C"函数内的数据操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72261262/

相关文章:

C - 需要帮助交换红色和绿色组件

c - 服务器如何保存客户端发送的文件?

delphi - 如何获取加密数据的大小?

c++ - 对类型 '' 的非常量左值引用无法绑定(bind)到类型 ' *' 的临时对象

C++引用与for循环内变量的指针?

c - 摆脱不兼容的指针警告

c - 从C语言文件中读取文本

c - 我做错了什么 - C 指针

c++ - 即使使用 malloc,两个 char * 也可以具有相同的内存地址吗?

javascript - 如何将查询响应分配给 global.arrays,而不是 global.arrays 数组中的值?