对于下面的代码(在C中)
int small_a, small_b;
printf("Please input two numbers\n");
scanf_s("%d %d", &small_a, &small_b);
printf("%d %d", &small_a, &small_b);
int test_2nd = small_a - small_b;
if (test_2nd < 0) {
printf("a is smaller %d", &small_a);
}
else {
printf("b is smaller %d", &small_b);
我写4和2时打印的值是一个巨大的六位数(在这种情况下为5504620和5504608)我不明白它出错的地方。 stdio.h
已被列为标题。
答案 0 :(得分:2)
这里的问题出在print语句中。在代码中
printf("%d %d", &small_a, &small_b);
您不需要(想要)来获取(打印)地址。删除&
。
那就是说,这实际上是在调用undefined behavior。 %d
printf()
期望int
类型的参数,并且您实际上提供了int *
,从而导致UB。
FWIW,要打印地址(指针),您需要使用%p
格式说明符并将参数强制转换为void *