【问题标题】:Why is this function not incrementing my variable in c?为什么这个函数不增加我在 c 中的变量?
【发布时间】:2019-07-20 07:11:12
【问题描述】:
所以只是在 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”?
【问题讨论】:
标签:
c
function
pointers
printing
increment
【解决方案1】:
你需要将x的地址分配给p。如其他答案中所述,您可能只想传入inc(&x);。不需要声明一个变量就这样浪费了。
【解决方案2】:
因为你没有将p设置为x的地址
使用
p = &x;
而不是
*p = x;
使用*p = x 会导致未定义的行为,因为p 具有不确定的值并指向*某处*。但是您不知道它指向哪里,并且使用*p = x 将x 的值写入该内存位置。
【解决方案3】:
这是你的错误:
*p = x;
您正在取消引用未分配的p,并为其赋予当前值x。所以x 没有改变,因为您没有将指向x 的指针传递给您的函数,并且取消引用未初始化的指针会调用undefined behavior。
您希望将x 的地址分配给p:
p = &x;
或者,您可以完全删除p,只需将x 的地址传递给inc:
inc(&x);