这里有一些我不明白的地方。也许有人可以阐明它。
我知道数据操作的标准方法是传递对函数的引用并更改函数中的数据。像这样:
#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 ¶m) {
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 ¶m) {
不正确。在 C 中没有引用。这样的函数声明将在存在引用的 C++ 中有效。
在C++中当函数被调用时
function2(variable);
没有创建变量的副本。该函数引用在 main 中声明的原始变量。
关于c - "C"函数内的数据操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72261262/