Переменная-указатель обрабатывается в памяти иначе, чем обычная переменная в C? - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь обернуть голову вокруг указателей, но на данный момент это сбивает с толку.

Когда компилятор C встречает переменную в памяти, он, естественно, считывает текущее значение.Если «X» было равно 8, то значение X будет считываться как 8.

Но когда компилятор встречает указатель в памяти, он не читает значение указателя (значениеуказателя является случайным), но вместо этого он идет по адресу, сохраненному в указателе.

Но дело в том, что каждая переменная имеет значение и адрес.Почему C специально указывает адрес переменной указателя?

Я не уверен, как сформулировать это так, чтобы это имело смысл.

Какой смысл объявлять переменную-указатель, когда мы можем получить доступ к адресу любой переменной, используя &оператор и вывести указатель?

У меня проблемы с визуализацией переменной указателя.

То, как я вижу это сейчас в моей голове, заключается в том, что каждая переменная имеет адрес и значение.Это факт.Я не уверен, что делает переменная-указатель, поскольку, как и обычная переменная, она также имеет значение и адрес.

1 Ответ

0 голосов
/ 29 мая 2018

Переменные указателя обрабатываются так же, как и любая другая переменная, когда дело доходит до хранилища.

С учетом следующих объявлений

int i = 1;
int *p = &i;

вы получите что-то вроде этого:

Item        Address            Value
––––        –––––––            –––––
   i        0x8000                 1    // address values for illustration
   p        0x8004            0x8000    // purposes only

Целочисленная переменная i хранится по адресу 0x8000 и содержит значение 1.Переменная-указатель p хранится по адресу 0x8004 и содержит адрес i.

IOW, единственная разница между i и p - это тип значения, которое они хранят, и какие операции выполняютсяразрешено на них.

Что касается того, почему мы используем указатели, они требуются в следующих случаях:

  • Для отслеживания динамически выделяемой памяти;
  • Для разрешенияфункция для изменения значения входного параметра

Они также полезны при построении динамических структур данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...