如果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
如果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
当前回答
指针和引用是两个不同的东西。
有几件事我没有看到有人提到。
指针是某物的地址。指针可以像其他变量一样存储和复制。因此,它有一个大小。
引用应该被视为某个东西的别名。它没有大小,不能存储。它一定是指什么。不能为空或更改。好吧,有时候编译器需要将引用存储为指针,但这是实现细节。
有了引用,你就不会有指针的问题,比如所有权处理、空检查、使用时取消引用。
其他回答
因为你把指针的值传递给了方法然后对它进行解引用以得到所指向的整数。
您正在按值传递一个指针(地址位置)。
这就像是在说“这里有我想让你更新的数据”。
P是一个指针变量。它的值是i的地址。当你调用f时,你传递p的值,它是i的地址。
“通过引用传递”(通过使用指针)从一开始就存在于C语言中。你为什么不这么认为?
因为你传递了一个指向变量p的指针(内存地址)到函数f中。换句话说,你传递的是一个指针而不是一个引用。