我写了下面的"你好世界!-级别代码:
#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: %pn", Bptr);
double Barray = 1.02;
Bptr = &Barray;
if (Bptr == NULL); {printf("Bptr is still a null pointer: %pn", Bptr); };
if (!Bptr); {printf("Bptr is still a null pointer (check 2): %pn", Bptr); };
printf("The address of Bptr is: %pn", 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控制台/桌面应用程序启动,所以我怀疑这可能与此有关。有没有人对可能导致这种行为的原因有任何建议?
if 语句后有一个分号,删除它就可以工作了。 :)
你在 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: %pn", Bptr);
double Barray = 1.02;
Bptr = &Barray;
if (Bptr == NULL) {printf("Bptr is still a null pointer: %pn", Bptr); }
if (!Bptr) {printf("Bptr is still a null pointer (check 2): %pn", Bptr); }
printf("The address of Bptr is: %pn", Bptr);
return 0;
}