何时使用&阅读输入时

时间:2015-12-10 04:47:47

标签: c scanf

我对scanf()感到很困惑。 当我们从键盘读取数据时,我们何时使用&。 根据我的理解,当您希望程序读入某些内容时,始终会使用&

Eg. scanf("%c",&varA) or  scanf("%d",&varA)

我也明白,当您使用指针时,您不能将&用于scanf()

如果我想将scanf()某些内容放入数组中怎么办?使用&? 我知道数组的名称求值为数组的第一个元素的地址,这也类似于指针。

3 个答案:

答案 0 :(得分:3)

在第一个之后传递给scanf的参数都是地址。您需要提供变量的地址以分配输入值。

这就是为什么当你读取变量的值时,你必须使用&运算符传递它的地址。

例如,

int n;
scanf("%d", &n);

您还可以将变量的地址地址分配给指针并使用:

int n;
int *p = &n;
scanf("%d", p);

在数组的情况下,数组的名称实际上是基地址,即第一个元素的地址。您也可以在scanf中使用它:

int arr[4];
scanf("%d", arr); // the input value will be stored in a[0]
scanf("%d", &arr[0]); // does the exactly same thing as the statement above

scanf("%d", &arr[1]); // reads the input into a[1]
scanf("%d", a + 1); // does the same as above

这种方式对于从输入中读取没有空格的字符串非常有用:

char str[64];
scanf("%s", str);

答案 1 :(得分:3)

scanf()使用format string,因此要读取特定变量,需要查看哪个会给出变量的地址

1)对于正常变量int a,需要&scanf("%d", &a);

2)对于指针变量int* a,不需要&scanf("%d", a);

3)对于数组int a[10]

  • 仅使用名称时,不需要&scanf("%s", a);
  • 使用元素时,&
  • 是必需的scanf("%d", &a[0]);

答案 2 :(得分:0)

  

如果我想将scan()某些东西放入数组呢?

这取决于您感兴趣的数组。

  • 如果是字符数组,那么您可以使用scanf("%s", s);而不使用&运算符(给定s是字符数组)。
  • 如果是数字数组,则需要scanf("%d", &a[i]);表示单个数组元素,因此需要&运算符。
相关问题