Ваше понимание того, какие ответы являются правильными, ошибочно.
Чтобы напечатать значение типа float
с помощью printf
, вам нужно использовать спецификатор формата %f
и передать значение типа float
.Чтобы прочитать значение типа float
с scanf
, вы также используете спецификатор формата %f
, но передаете значение типа float *
.
Что касается индексации массива, запись A[N]
точноэквивалентно *(A + N)
и имеет тип элемента массива, а &A[N]
точно соответствует A + N
и имеет указатель типа на элемент массива.
Исходя из этого, мы имеем следующее:
printf("%f",B[i]); // Correct
printf("%f",&B[i]); // Incorrect, passing a float *, expected float
printf("%f",B+i); // Incorrect, passing a float *, expected float (same as prior)
printf("%p",*(B+i)); // Incorrect, %p is used to print a pointer (expects a void *)
printf("%f",*(B+i)); // Correct
scanf("%f", B[i]); // Incorrect, passing a float, expected float *
scanf("%f", B+i); // Correct
scanf("%p", B+i); // Incorrect, %p is used to read a pointer (expects a void *)
scanf("%f", &B[i]); // Correct
scanf("%f", *(B+i)); // Incorrect, passing a float, expected a float *