Тип массива имеет специальное свойство, в некоторых случаях переменная с массивом типов распадается на тип как указатель на первый элемент массива.
Цитата C11
, глава §6.3.2.1
За исключением случаев, когда это операнд оператора sizeof
, оператора _Alignof
или
унарный оператор &
, или строковый литерал, используемый для инициализации массива, выражение, которое имеет
Тип ‘‘ массив типа ’’ преобразуется в выражение с типом ‘‘ указатель на тип ’’ , который указывает
к начальному элементу объекта массива и не является lvalue. [...]
Однако, если тип не является типом массива, он не сохраняется.
Судя по вашему описанию, у вас есть массив, определенный как
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