数组输入使用for循环

时间:2019-05-24 05:16:26

标签: c arrays scanf

我是编程的初学者。有人教导说数组存储第一个元素的地址。在使用scanf输入Array元素时使用for循环时,我不应该使用&字符 它应该是("%d",Arr[i])而不是("%d",&Arr[i])。 但是为什么它显示错误?

1 个答案:

答案 0 :(得分:3)

数组类型具有特殊的属性,在某些情况下,类型为array的变量会衰减为指向数组第一个元素的指针。

引用C11,第6.3.2.1章

  

除非它是sizeof运算符,_Alignof运算符或   一元&运算符,或者是用于初始化数组的字符串文字,该表达式具有   类型“类型数组” 转换为类型为“类型指针” 的表达式   数组对象的初始元素,不是左值。 [...]

但是,如果类型不是数组类型,它将不成立。

根据您的描述,听起来您已将数组定义为

int Arr[16];   // 16 is arbitrary, just for example

在您的情况下,Arr是整数数组,而Arr[i]不是数组类型,它是整数。因此,您必须将此整数的地址传递给scanf()

正确的说法是

 ("%d",&Arr[i]); // passing the address.

要进行比较,如果您定义的数组类似

 char array [16]; 

那么你就可以写

 scanf("%15s", array); // 'array' is array type, which is same as `&array[0]` in this case
相关问题