Как получить адрес памяти в C и вывести его? - PullRequest
2 голосов
/ 27 января 2011

Мне нужно получить адрес памяти и биты индекса, затем мне нужно вывести индекс адреса памяти. Кто-нибудь может помочь?

Ответы [ 2 ]

15 голосов
/ 27 января 2011

Учитывая любую переменную в C, вы можете получить ее адрес, используя оператор "address-of" &:

int x;
int* addressOfX = &x;

Вы можете распечатать адреса, используя спецификатор %p в printf:

printf("%p\n", &x); // Print address of x

Чтобы получить доступ к отдельным битам целочисленного значения, вы можете использовать операторы побитового сдвига вместе с побитовым AND, чтобы сдвинуть нужный бит в правильное положение, а затем замаскировать другие биты. Например, чтобы получить 5-й бит x, вы можете написать

int x;
int fifthBit = (x >> 4) & 0x1;

Это сдвигает число вниз на 4 бита, оставляя пятый бит в месте LSB. ANDing это значение с 1 (который имеет 1 бит в самом низком месте и 0 бит везде) маскирует другие биты и возвращает значение. Например:

int x = 31; // 11111
prtinf("%d\n", (x >> 4) & 0x1); // Prints 1
0 голосов
/ 29 декабря 2015

Это сработало для меня;)

  // uses :: head
  // ----------------------------------------------
     #include <stdio.h>
  // ----------------------------------------------


  // func :: main
  // ----------------------------------------------
     int main()
     {
        void *fooz = "bar";
        char addr[64];

        sprintf(addr, "%p", &fooz);

        // do some stuff with `addr`, or not :)
        puts(addr);

        return 0;
     }
  // ----------------------------------------------

Распечатывает что-то вроде: ~> 0x7ffdfb91d698

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