Почему не делает потребности scanf амперсанд для строк и также хорошо работает в printf (в C)?

Я узнаю о строках в C теперь.

Каким образом использовать scanf для получения строки, можно сделать

scanf("%s",str1);

и для printf можно сделать

printf("The string is %s\n", str1);

Я понимаю, что для scanf это - потому что строка является просто символьным массивом, который является указателем, но для printf, как получается, что можно просто поставить имя переменной точно так же, как Вы были бы для интервала или плавания?

8
задан Adam 19 December 2009 в 03:27
поделиться

2 ответа

В C переменные, которые являются массивами, становятся указателем на первый элемент массива при использовании в качестве аргументов функции - поэтому ваш scanf () видит указатель на память (при условии, что "str1" массив).

В вашем printf () "str1" может быть либо указателем на строку, либо массивом символов (в этом случае аргумент, видимый printf (), будет указателем на первый элемент массива ).

5
ответ дан 5 December 2019 в 11:25
поделиться

scanf требуется адрес переменной для чтения, а строковые буферы уже представлены как адреса (указатель на место в памяти или массив, который разлагается на указатель).

10
ответ дан 5 December 2019 в 11:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: