Нахождение значения, хранящегося в памяти C / C ++

0

Допустим, у меня есть функция, которая принимает целочисленное значение. Теперь в функции я хочу знать значение, которое хранится в ячейке памяти, на которую указывает это целочисленное значение.

void function(int a)
{
  //say, a=10 then I want to know the value stored in memory address 10
}
Теги:
pointers

3 ответа

4
Лучший ответ

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

Начиная с C99/С++ 11 вы можете использовать тип uintptr_t, который может быть преобразован в указатель и от него:

// In C++ include <cstdint>
#include <stdint.h>

void function(uintptr_t a) {
    uint8_t *ptr = (uint8_t*)a;
    uint8_t val = *ptr;
}
0

В C++:

int function(int a)
{
    return *reinterpret_cast<int*>(a);
}

Или в C (также работает в C++):

int function(int a)
{
    return *(int*)a;
}

Конечно, это будет работать, только если адрес действительно вписывается в int в первую очередь; на 64-битных системах, где int имеет ширину 32 бита, на самом деле это не имеет смысла. uintptr_t вы можете использовать uintptr_t в качестве типа аргумента, так как это гарантировано достаточно, чтобы удерживать адрес (то есть указатель).

И я решил интерпретировать местоположение памяти как int, но вам нужно использовать соответствующий тип возвращаемого значения (например, если адрес находится в конце страницы и вы разыскиваете 4-байтовый int, ваша программа может сбой).

-1

Вы можете использовать int, чтобы передать подобное

    #include<iostream>
using std::cout;
int main(int a)
{
int* test;
test = &a;
cout<<"Value of a is "<<*test<<"\n";
cout <<test<<" is the memory address of a\n";
}

Это оно :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню