【问题标题】: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 = xx 的值写入该内存位置。

      【讨论】:

        【解决方案3】:

        这是你的错误:

        *p = x;
        

        您正在取消引用未分配的p,并为其赋予当前值x。所以x 没有改变,因为您没有将指向x 的指针传递给您的函数,并且取消引用未初始化的指针会调用undefined behavior

        您希望将x地址分配给p

        p = &x;
        

        或者,您可以完全删除p,只需将x 的地址传递给inc

        inc(&x);
        

        【讨论】:

          猜你喜欢
          • 2016-06-03
          • 1970-01-01
          • 2020-12-28
          • 2010-10-25
          • 1970-01-01
          • 1970-01-01
          • 2018-05-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多