Прежде всего, строка в c представляет собой массив символов. Таким образом, ваша строка содержит
h (position 0) e (position 1) l (position 2) e (position 3) \0 (position 4)
Все в скобках приводится только для пояснений.
Оператор &
возвращает адрес переменной или адрес элемента массива.
Так что, когда вы делаете
printf("string is %s: \n", &str[1]);
&str[1]
возвращает адрес str [1]
. Если вы поместите %c
в printf, значение элемента str [1]
, которое равно e
, будет напечатано. Но когда вы положили %s
, printf
берет его как начало строки, откуда он должен быть напечатан, и, таким образом, печатает строку до тех пор, пока не встретит нулевой ограничитель (\0
).
Для лучшего объяснения:
Существует строка, которая имеет содержание hele
. h
- это 0-й элемент, e
- 1-й элемент, l
- 2-й элемент, e
- это третий элемент, а \0
- четвертый элемент. Строка в основном представляет собой массив символов, в котором каждый элемент является char
. У каждого из них есть адрес. Таким образом, &str [1]
возвращает адрес 1-го элемента char array
. Затем, %s
принимает это как начало строки для печати и печатает строку до тех пор, пока не встретит нулевой ограничитель (\0
). Таким образом, он принимает начало строки как 1 e
, или 1-й элемент. Затем печатает l
и e
, после чего он встречает нуль-терминатор, где он останавливается.
& str [1] действительно возвращает адрес. % S в функции printf использует его как начало строки и будет продолжаться до тех пор, пока не встретится с нулевым терминатором. Таким образом, ele. – Cobster
this '& str [1]' - это адрес второго элемента в строковом массиве, индекс массивов начинается с 0, поэтому первым элементом является '& str [0]'. – milevyo