为什么此函数不增加c中的变量?

时间:2019-02-26 17:04:00

标签: c function pointers printing increment

所以只需在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”?

3 个答案:

答案 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 = xx的值写入该内存位置。

答案 2 :(得分:0)

您需要将x的地址分配给p。如其他答案所述,您可能只想传递inc(&x);。无需声明变量并像这样浪费它。