З наведених прикладів можна зробити висновок, що надати значення деякій статичній змінній можна двома способами:
- використовуючи її ім’я ( а = 5)
через вказівник, значенням якого
Вказівнику дозволено вказувати тільки на об'єкти певного типу. (Існує одне виключення: "вказівник на void" може вказувати на об'єкти будь-якого типа, але до такого вказівника не можна застосовувати оператор непрямого доступу.
Якщо ip вказує на x цілого типу, то *ip можна використовувати в будь-якому місці, де допустимо вживання x;
наприклад*ip = *ip + 10; збільшує *ip на 10.
Унарні оператори * і & мають більш високий пріоритет, ніж арифметичні оператори, так що присвоєння у = *ip + 1; бере те, на що вказує ip, і додає до нього 1, а результат присвоює змінній у.
Аналогічно *ip += 1; збільшує на одиницю те, на що вказує ip; ті ж дії виконують ++*ip; і (*iр)++;
В останньому записі дужки необхідні, оскільки якщо їх не буде, збільшиться значення самого вказівника, а не того, на що він вказує. Це обумовлено тим, що унарні оператори * і ++ мають однаковий пріоритет і порядок виконання - справа наліво.
Оскільки вказівники самі є змінними, в тексті вони можуть зустрічатися і без оператора непрямого доступу.
- є адреса цієї змінної (b = &a; *b = 10)
Переадресація вказівників
Відразу після створення вказівника b (int *b), він отримує значення випадкової адреси (b = 000B:8FCF). Варто пам’ятати, що комірка пам’яті з адресою 000B:8FCF – випадкова, тобто в цій комірці може зберігатися значення деякої іншої змінної (неможливо сказати якої, бо адреса її вибиралася випадково). Тому, якщо відразу після створення вказівника b (int *b) виконати оператор *b = 10, то таким чином можна змінити значення деякої змінної (визначити якої неможливо). Тому після створення вказівника необхідно:
- або переадресувати її на потрібну статичну змінну (як у наведених прикладах b = &a – переадресація вказівника b на статичну змінну а);
- або створити так звану динамічну змінну, адрес якої буде міститися у вказівнику)