Давайте что у вас есть массив из 3 целых чисел со значениями 150, 200 и 250. в памяти, этот массив будет выглядеть следующим образом:
+----------+----------+----------+---
| 96000000 | c8000000 | fa000000 |...
+----------+----------+----------+---
| aka 150 | aka 200 | aka 250 |...
+----------+----------+----------+---
a (a+1) (a+2)
Теперь, вы не имеете дело с массивом целых чисел здесь, но целые несколько проще продемонстрировать.
Указатели и массивы в значительной степени взаимозаменяемы в C/C++, поэтому в приведенном выше примере подумайте о a
как указатель. Уже это означает, что string
и ptr
по существу являются одной и той же переменной.
С учетом этого разница между *(pointer+i)
и *pointer+1
- это то, к чему применяется 1. В первом случае это адрес указателя. Во втором случае это значение указывает на указатель. Чтобы продолжить приведенном выше примере:
int x = *a+1; // x is 151
int y = *(a+1); // y is 200
int z = *(a+1)+1; // z is 201
[См 'оператор precedence'] (http://en.cppreference.com/w/cpp/language/operator_precedence) – Rakete1111
' * (PTR + I) 'будет печатать символ в смещении 'i' из указателя местоположения памяти на' ptr' AND '* ptr + i' будет увеличивать значение в ячейке памяти, на которую указывает' ptr', на i. Кроме того, неправильное условие прерывания цикла. Он должен быть 'string [i]! = '\ 0''. – Arunmu
Я все еще не понимаю. Сделайте это проще, пожалуйста! @Arunmu –