如果C不支持通过引用传递变量,为什么可以这样做呢?
#include <stdio.h>
void f(int *j) {
(*j)++;
}
int main() {
int i = 20;
int *p = &i;
f(p);
printf("i = %d\n", i);
return 0;
}
输出:
$ gcc -std=c99 test.c
$ a.exe
i = 21
发布于 2010-02-09 21:54:31
因为在上面的代码中没有按引用传递。使用指针(如void func(int* p)
)是按地址传递的。这在C++中是按引用传递的(在C中不起作用):
void func(int& ref) {ref = 4;}
...
int a;
func(a);
// a is 4 now
发布于 2010-02-09 21:54:30
您的示例之所以有效,是因为您将变量的地址传递给一个函数,该函数使用dereference operator操作变量的值。
虽然C语言不支持reference data types,但您仍然可以通过显式传递指针值来模拟按引用传递,如您的示例所示。
与继承自C的指针类型相比,C++引用数据类型的功能较弱,但被认为更安全。这将是您的示例,适用于使用C++ references
void f(int &j) {
j++;
}
int main() {
int i = 20;
f(i);
printf("i = %d\n", i);
return 0;
}
发布于 2010-02-09 23:28:48
在C中没有通过引用传递,但是p“引用”到i,并且你通过值传递p。
https://stackoverflow.com/questions/2229498
复制相似问题