-2

当我使用此代码时:

#include <stdio.h>

int main(void){
  int hi, hello;

  hi = 1;
  hello = 100;

  printf("%d and %d", &hi, &hello);

  printf("\nPress any key to exit...");
  getch();
}

它打印:

2358876 and 2358872

Press any key to exit

但是当我将变量hi分别定义hello为整数时,它会做它应该做的事情。为什么会打印这些奇怪的数字?

4

3 回答 3

10

改变这个:

printf("%d and %d", &hi, &hello);

对此:

printf("%d and %d", hi, hello);

您想打印变量的,而不是它们的地址。

如果您确实想打印他们的地址,则需要使用%p地址并将其转换为void*

printf("address of hi is %p\n", (void*)&hi);

scanf(您可能对读取的值需要地址这一事实感到困惑。)

你说如果你“将变量 hi 和 hello 分别定义为整数”,你会得到正确的行为。我不明白你的意思;如果你在你的电话中使用&hiand ,你总是会得到奇怪的值。&helloprintf

于 2013-09-21T18:57:18.557 回答
1

您打印的不是变量的值,而是在 hi 和 hello 之前使用“&”的地址。
要打印值,您必须这样写:
printf("%d and %d", hi, hello);

于 2013-09-21T19:02:47.723 回答
1

它给出了正确的答案...

&用于指定地址...

由于两个变量不能具有相同的地址,因此每个变量都会显示不同的地址

如果要打印值,请不要在打印中指定 &。

例如

printf("%d",hi);    // will give you 1

printf("%d",&hi);   // Will always gives you different number every time on every machine

// It is showing address where the actual value of the variable hi is stored.. 
于 2013-09-21T19:06:21.200 回答