标准C中指针整数错误的比较

Rio*_*Rio 0 c pointers

我正在将我的代码从变量更改为指针,我遇到了一些麻烦.曾经使用过的地方(很大程度上缩写):

int best = 0;
int max = 10;
if (max > best) {
    best = max;
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用指针,以便我可以使用pass-by引用将其抽象为函数.

int *best;
*best = 0;
int max = 10;
if (max > *best) {
    *best = max;
}
Run Code Online (Sandbox Code Playgroud)

我在线上遇到了分段错误(max > *best).你能告诉我哪里出错了吗?

Jon*_*Jon 7

我不知道它是如何得到的,因为:

int *best;
*best = 0;
Run Code Online (Sandbox Code Playgroud)

你只是抓住4个字节,它们有一些(你不知道)以前的值,将其解释为一个内存位置并在其上写入所有零.

更长的解释:int *best让您使用名称best来引用内存位置.麻烦的是,你还没有指定哪个你想存储位置.由于指针只是内存中的多个字节,并且这些字节保存了一些值(即使未使用的内存保存了一些值),实际上新指针指向未知的内存位置.当你取消引用它时,会发生不好的事情.

试试这种方式:

int someInt = 0;
int* best = &someInt;
*best = 0;
Run Code Online (Sandbox Code Playgroud)

现在您知道用零覆盖的内存:为变量正确保留的部分someInt.