所以只需在C中尝试使用指针。
void inc(int *p){
++(*p);
}
int main(){
int x = 0;
int *p;
*p = x;
inc(p);
printf("x = %i",x);
}
为什么打印“ x = 0”而不是“ x = 1”?
答案 0 :(得分:7)
这是您的错误:
*p = x;
您要取消引用未分配的p
,并将其当前值设为x
。因此,x
不会更改,因为您没有将指向x
的指针传递给函数,并且取消引用未初始化的指针会调用undefined behavior。
您改为将{em> x
的地址分配给p
:
p = &x;
或者,您可以完全删除p
,只需将x
的地址传递给inc
:
inc(&x);
答案 1 :(得分:2)
因为您没有将p
设置为x
的地址
使用
p = &x;
代替
*p = x;
使用*p = x
会导致不确定的行为,因为p
的值不确定并且指向*某处*。但是您不知道它指向的位置,并使用*p = x
将x
的值写入该内存位置。
答案 2 :(得分:0)
您需要将x的地址分配给p。如其他答案所述,您可能只想传递inc(&x);
。无需声明变量并像这样浪费它。