Ссылки на переменные и как указатели взаимодействуют с памятью - PullRequest
0 голосов
/ 05 июля 2019

Когда создается переменная, такая как:

int x = 5;

, она будет храниться где-то в памяти, круто.

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

x = 10;

Что происходит в памяти?

Заменяет ли новое значение x старое значение, используя тот же адрес памяти?

или это новоезначение сохраняется в новом адресе памяти, а затем старый адрес удаляется?

Этот вопрос возник, когда я наткнулся на указатели.Кажется, что использование указателей для изменения значения переменной - это то же самое, что и определение переменной с другим значением.

это мой код (большинство из них - комментарии (смеется)):

#include "iostream"

int main()
{
    int x = 5; // declaring and defining x to be 5
    int *xPointer = &x; // declare and define xPointer as a pointer to store the reference of x

    printf("%d\n",x); // print the value of x
    printf("%p\n",xPointer); // print the reference of x

    x = 10; //changing value of x

    printf("%d\n",x); //print new value of x
    printf("%p\n",xPointer); //print the reference of x to see if it changed when the value of x changed

    *xPointer = 15; //changing the value of x using a pointer

    printf("%d\n",x); //print new value of x
    printf("%p\n",xPointer); //print reference of x to see if it changed

    return 0;
}

это вывод:

5
00AFF9C0
10
00AFF9C0
15
00AFF9C0

Как вы можете видеть, адреса памяти одинаковы, отсюда и смысл указателей (каламбур предназначен).

1 Ответ

2 голосов
/ 05 июля 2019

Когда вы объявляете int x = 5;, вы говорите, что x имеет автоматическую продолжительность хранения и инициализируется значением 5.

В течение времени жизни x указатель на x (т.е. &x) будет иметь то же значение.

Вы можете изменить значение x с помощью присваивания x = 10 или с помощью разыменования указателя *xPointer = 15, установив int* xPointer = &x;.

В стандарте языка ничего не говорится о том, что значение указателя является адресом памяти, хотя это может быть. Это распространенное заблуждение относительно того, как работает язык.

(Действительно, новое значение x может привести к изменению расположения в памяти. Это разрешено языком, если значение указателя не меняется. Операционная система вполне может что-то сделать аналогично этому, в интересах устранения дефрагментации памяти.)

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