我知道这段代码:
void incVar(int i){ i++; }
我们知道这将创建整数的副本,然后增加该值,但不是实际值.
本质上:C中的方法在其堆栈帧中创建参数的副本,而不是原始变量.
但:
void incVar(int *i){ (*i)++; }
应该通过指针取消引用来增加整数的实际值.
但是,为什么C只是不创建指针的副本*i
呢?如果这是常规整数的正常行为,那么为什么指针不会发生同样的事情呢?
它与指针一样.C中的所有变量都是按值传递的,甚至是指针.
将存储在函数外部的指针中的地址复制到其参数中.
但是您可以使用该地址来引用可以在任何地方分配的变量.所以在下面的代码中:
int j = 0; incVar(&j);
incVar
收到副本的地址j
.但它可以使用该地址直接读取或修改j
(in).