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