我正在将我的代码从变量更改为指针,我遇到了一些麻烦。曾经使用过的地方(很大程度上缩写):
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)
行遇到了细分错误。你能告诉我哪里出错了吗?
答案 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;