为什么这个函数不增加我在 c 中的变量?
Why is this function not incrementing my variable in c?
所以只是在 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"?
这是你的错误:
*p = x;
您正在取消引用未分配的 p
,并为其赋予 x
的当前值。所以 x
没有改变,因为你没有将指向 x
的指针传递给你的函数,并且取消引用未初始化的指针会调用 undefined behavior。
您想要将 x
的 地址分配给 p
:
p = &x;
或者,您可以完全删除 p
并将 x
的地址传递给 inc
:
inc(&x);
因为你没有设置p
到x
的地址
使用
p = &x;
而不是
*p = x;
使用 *p = x
会导致未定义的行为,因为 p
具有不确定的值并指向 *某处*。但是您不知道它指向何处,并且使用 *p = x
将 x
的值写入该内存位置。
您需要将x的地址分配给p。正如其他答案中提到的,您可能只想传入 inc(&x);
。不需要声明一个变量就这样浪费它。
所以只是在 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"?
这是你的错误:
*p = x;
您正在取消引用未分配的 p
,并为其赋予 x
的当前值。所以 x
没有改变,因为你没有将指向 x
的指针传递给你的函数,并且取消引用未初始化的指针会调用 undefined behavior。
您想要将 x
的 地址分配给 p
:
p = &x;
或者,您可以完全删除 p
并将 x
的地址传递给 inc
:
inc(&x);
因为你没有设置p
到x
使用
p = &x;
而不是
*p = x;
使用 *p = x
会导致未定义的行为,因为 p
具有不确定的值并指向 *某处*。但是您不知道它指向何处,并且使用 *p = x
将 x
的值写入该内存位置。
您需要将x的地址分配给p。正如其他答案中提到的,您可能只想传入 inc(&x);
。不需要声明一个变量就这样浪费它。