C/C++
Как взять значение конкретного адреса в памяти?
Мне известен адрес в памяти, значение которого я хочу изменить.
какое значение? Типы данных не просто так придумали: знаковое/беззнаковое, целое и какого размера/одинарное с плавающей точкой/двойной точности. Вот и надо объявить соответствующий указатель, присвоить ему значение адреса, а потом по указателю читать или писать значение.
int* pointer=0x666;
*pointer=999;
int* pointer=0x666;
*pointer=999;
int x = 5; // это инициализированная переменная, она хранит значение и находится в памяти по какому-то адресу
int* p = nullptr; // это указатель – переменная, которая умеет хранить адрес объекта, расположенного в памяти, но для этого ей этот адрес нужно присвоить
p = &x; // это присвоение адреса переменной указателю с использованием операции взятия адреса, теперь указатель «p» хранить адрес переменной «x»
*p = 8; // чтобы через указатель изменить значение переменной следует получить доступ к этому значению, используя операцию разыменования «указателя»
int* p = nullptr; // это указатель – переменная, которая умеет хранить адрес объекта, расположенного в памяти, но для этого ей этот адрес нужно присвоить
p = &x; // это присвоение адреса переменной указателю с использованием операции взятия адреса, теперь указатель «p» хранить адрес переменной «x»
*p = 8; // чтобы через указатель изменить значение переменной следует получить доступ к этому значению, используя операцию разыменования «указателя»
ты в курсе, что память делится на виртуальную и физическую, и это не равнозначные понятия
Если известен адрес, то для получения значения его нужно привести к тому типу (например char для одного байта), который хотим получить, прочитав из этого адреса, после чего разыменовать (указав звездочку перед приведением).
Следует учесть, что в операционных системах идёт защита отдельных блоков, например, 64кб или 1мб околонулевых адресов на случай ошибки индексации, также могут защищаться блоки, где не было выделено памяти, в таком случае получим исключение
Следует учесть, что в операционных системах идёт защита отдельных блоков, например, 64кб или 1мб околонулевых адресов на случай ошибки индексации, также могут защищаться блоки, где не было выделено памяти, в таком случае получим исключение
руками чел
Компьютерная память это слишком обобщенное понятие скрывающие кучу слоев абстракций и без уточнения контекста в котором задается вопрос ответить правильно на него невозможно.
Как пример похожего вопроса с неполными исходными данными.
--- > Какая будет сумма от сложения двух чисел?
Как пример похожего вопроса с неполными исходными данными.
--- > Какая будет сумма от сложения двух чисел?
В памяти ничего не изменишь чел!
Похожие вопросы
- Не правильное значение по адресу памяти c++
- Почему при работе с небольшими объёмами данных передача параметров по адресу может быть эффективнее, чем по значению?
- Имя массива после инициализации принимает адрес в стеке, который указывает на адрес в куче? (Си)
- Передача параметров в функцию по адресу.
- C++ и динамическая память: это приемлемо?
- Написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде
- Если приложение вызывает утечку памяти, то при завершение работы приложения динамическая память очиститься или нет?
- C++ слишком много значений инициализатора.
- Записать значения чисел фиббоначи в переменные и вернутт одновременно три значения переменных.
- Почему не меняется значения в массиве