我写了以下“Hello world!” - 级别代码:
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
int main(const int argc, const char *argv[]) {
double *Bptr = NULL;
printf("Bptr's current value is: %p\n", Bptr);
double Barray = 1.02;
Bptr = &Barray;
if (Bptr == NULL); {printf("Bptr is still a null pointer: %p\n", Bptr); };
if (!Bptr); {printf("Bptr is still a null pointer (check 2): %p\n", Bptr); };
printf("The address of Bptr is: %p\n", Bptr);
return 0;
}
当我使用Visual Studio 2017构建并运行上述内容时,会产生以下奇怪的输出:
Bptr's current value is: 00000000
Bptr is still a null pointer: 00B3FD58
Bptr is still a null pointer (check 2): 00B3FD58
The address of Bptr is: 00B3FD58
不出所料,这不是我想要的。这是我第一次遇到这个问题。这也是我第一次将MSVS项目作为一个“空项目”,而不是Windows控制台/桌面应用程序,所以我怀疑它可能与此有关。有没有人对可能导致这种行为的原因有任何建议?
答案 0 :(得分:3)
if语句后面有一个分号,删除它就可以了。 :)
答案 1 :(得分:0)
您在 if 语句后使用分号。这就是为什么,尽管有条件,printf语句总是被执行。并且不需要在花括号后加分号,它什么都不做。
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
int main(const int argc, const char *argv[]) {
double *Bptr = NULL;
printf("Bptr's current value is: %p\n", Bptr);
double Barray = 1.02;
Bptr = &Barray;
if (Bptr == NULL) {printf("Bptr is still a null pointer: %p\n", Bptr); }
if (!Bptr) {printf("Bptr is still a null pointer (check 2): %p\n", Bptr); }
printf("The address of Bptr is: %p\n", Bptr);
return 0;
}