【发布时间】:2021-06-23 14:59:42
【问题描述】:
我正在尝试编写代码来检查 int 指针是否为偶数。
我的代码是这样的:
#include <stdio.h>
#include <string.h>
void isEven (int *isFlag, int num) {
if (num % 2 == 0) {
*isFlag = 1;
} else {
*isFlag = 0;
}
}
int main() {
int num = 4;
int *isFlag = 0;
isEven(isFlag, num);
printf("%d", isFlag);
}
但是我得到了分段错误,我应该看到isFlag = 1,代码中的问题是什么? (我知道我们可以做得更好,但我正在尝试理解指针)
【问题讨论】:
-
int *isFlag = 0是你的问题。您应该为 int 分配内存并将其分配给 isFlag。 -
打开编译器警告并阅读它们。
printf("%d", isFlag);->printf("%d", *isFlag);。这是问题之一。 -
printf("%d", isFlag)打印指针的地址。 -
你用指针写。当你通过它写的时候告诉我那个指针指向的地方,我不必告诉你为什么会有段错误。
-
正要发布我的答案,然后我看到了 4 个答案,似乎每个人都在赶潮流 ^^ 请注意,您将 isFlag 声明为 ptr,我认为 dbush 的答案最准确地反映了什么你应该这样做,以及其他很好的解释
标签: c pointers null-pointer