Нахождение значения указателей в памяти C - PullRequest
0 голосов
/ 09 октября 2018

Учитывая набор данных ниже и ответ, показанный внизу (b36d5c), как рассчитать это значение для & ptr [3].У меня просто проблемы с определением, к какой области набора данных он относится и как вы добавляете к этому размер, но я знаю, что ответ правильный.

sizeof (int) = 4

Data set starting at 0xb36d00 of size 128.
            0xb36d00: 48 6d b3 00 00 00 00 00 4c 6d b3 00 00 00 00 00 Hm......Lm......
            0xb36d10: 50 6d b3 00 00 00 00 00 30 6d b3 00 00 00 00 00 Pm......0m......
            0xb36d20: 04 6d b3 00 00 00 00 00 50 6d b3 00 00 00 00 00 .m......Pm......
            0xb36d30: 18 6d b3 00 00 00 00 00 1c 6d b3 00 00 00 00 00 .m.......m......
            0xb36d40: 48 6d b3 00 00 00 00 00 58 6d b3 00 00 00 00 00 Hm......Xm......
            0xb36d50: 44 6d b3 00 00 00 00 00 4c 6d b3 00 00 00 00 00 Dm......Lm......
            0xb36d60: 00 6d b3 00 00 00 00 00 0c 6d b3 00 00 00 00 00 .m.......m......
            0xb36d70: 68 6d b3 00 00 00 00 00 30 6d b3 00 00 00 00 00 hm......0m......
    int array[] is stored at:        0xb36d00
       int *ptr is stored at:        0xb36d28
short *shortPtr is stored at:        0xb36d28
          int x is stored at:        0xb36d38
        short y is stored at:        0xb36d14
   int ***what is defined by: (int ***)(((int **)0xb36d0c) + 2)

What is the value of &ptr[3]?
b36d5c

1 Ответ

0 голосов
/ 09 октября 2018
Говорят, что

int *ptr хранится в 0xb36d28.Память в 0xb36d28 содержит 0x00b36d50 в порядке с прямым порядком байтов (и содержит это значение независимо от того, являются ли указатели четырехбайтовыми или восьмыми, поскольку следующие четыре байта равны нулю).Таким образом, ptr равно 0xb36d50.Если указатели имеют четыре байта, то адрес ptr[3] равен 3 • 4 байта за 0xb36d50, поэтому он равен 0xb36d5c.(Поскольку это соответствует известному ответу, мы заключаем, что указатели - четыре байта, а не восемь.)

...