【发布时间】:2017-06-01 03:16:08
【问题描述】:
我知道这段代码:
void incVar(int i){
i++;
}
我们知道这将创建一个整数的副本,然后增加该值,但不是实际值。
本质上: C 中的方法在其堆栈框架中创建参数的副本,而不是原始变量。
但是:
void incVar(int *i){
(*i)++;
}
应该通过指针解引用来增加整数的实际值。
但是,C 为什么不直接创建指针*i 的副本呢?如果这是常规整数的正常行为,那么为什么指针不会发生同样的事情呢?
【问题讨论】:
-
你没有改变
i,所以这个结论不知从何而来。 -
将指针声明
int *i与指针取消引用运算符*i混淆是一个常见的错误。愚蠢的是,C 语言将*符号用于许多完全不同的事物。
标签: c