line
- это указатель.
line
в этом случае будет какое-то число, например 0x80b34560.
*line
будет что-то вроде 'c'
.
Итак, line
содержит адрес ячейки памяти, которая содержит (скажем,) 'c'
.
Когда вы хотите, чтобы line
указывал на следующее местоположение, вы говорите line++
, и это будет следующее число (например, 0x80b34561, которое является ячейкой памяти, содержащей 'd'
).
Ваша путаница здесь связана с приоритетом оператора при игре в *line++
. Это эквивалентно *(line++)
, потому что ++
имеет более высокий приоритет, чем *
. Итак, вы получаете значение, сохраненное в указателе, а затем выбрасываете его, что бесполезно.
Вот схема:
+-------------------------------+
| var | address | value |
+-------------------------------+
| line | 80b34560 | 'a' |
| (line+1) | 80b34561 | 'b' |
| line[2] | 80b34562 | ' ' |
| etc... | | |
+-------------------------------+
Обратите внимание, что для доступа к адресам я использовал две разные нотации - line+1
и line[2]
. Ваш вопрос "Перейти от строки [i] к строке [i + 1] ??" правильно, но переосмыслите свое заключение.