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

时间:2011-04-08 02:08:54

标签: c pointers

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

int best = 0;
int max = 10;
if (max > best) {
    best = max;
}

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

int *best;
*best = 0;
int max = 10;
if (max > *best) {
    *best = max;
}

我在(max > *best)行遇到了细分错误。你能告诉我哪里出错了吗?

4 个答案:

答案 0 :(得分:7)

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

int *best;
*best = 0;

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

更长的解释:int *best允许您使用名称best来引用内存位置。麻烦的是,您尚未指定所需的内存位置。由于指针只是内存中的一些字节,并且这些字节保存某些值(即使未使用的内存保存某些值),实际上你的新指针指向到一个未知的记忆位置。当你取消引用它时,会发生坏事

以这种方式尝试:

int someInt = 0;
int* best = &someInt;
*best = 0;

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

答案 1 :(得分:1)

在第二个示例中,您的best未初始化,因此它将指向未知地址。您可能希望将其指向现有的int。例如:

int best = 0;
int *best_ptr = &best; // Now best_ptr points to best
printf("value is %d\n", *best_ptr);

或者可能为它分配内存:

int *best_ptr = malloc(sizeof(int)); // Allocate
if (best_ptr != NULL) {
    *best_ptr = 0;
    printf("value is %d\n", *best_ptr);
    free(best_ptr); // Deallocate
}

答案 2 :(得分:0)

您要为指针分配地址,而不是值。将其更改为:

int * pbest;

int best;

pbest =& best;

* pbest = 0;

int max = 10;

if(max> * best){

*best = max;

}

答案 3 :(得分:0)

我认为问题在于你不能将整数分配给指针

相反,您应该为像

这样的指针指定一个位置
int score;
int *best = &score;

然后你可以为socre

分配一个整数
score = 0;