Ввод массива с использованием для цикла - PullRequest
0 голосов
/ 24 мая 2019

Я новичок в программировании. Учили, что в массивах хранится адрес первого элемента. При использовании цикла for при вводе элементов Array с использованием scanf не следует использовать символ & right оно должно быть ("%d",Arr[i]) вместо ("%d",&Arr[i]). но почему он показывает ошибку?

1 Ответ

3 голосов
/ 24 мая 2019

Тип массива имеет специальное свойство, в некоторых случаях переменная с массивом типов распадается на тип как указатель на первый элемент массива.

Цитата 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
...