我对scanf()
感到很困惑。
当我们从键盘读取数据时,我们何时使用&
。
根据我的理解,当您希望程序读入某些内容时,始终会使用&
。
Eg. scanf("%c",&varA) or scanf("%d",&varA)
我也明白,当您使用指针时,您不能将&
用于scanf()
。
如果我想将scanf()
某些内容放入数组中怎么办?使用&
?
我知道数组的名称求值为数组的第一个元素的地址,这也类似于指针。
答案 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]);
表示单个数组元素,因此需要&
运算符。