Почему значения указателя иногда бывают отрицательными? - PullRequest
0 голосов
/ 28 июня 2018

Я опробовал следующий пример кода из книги «Понимание и использование указателей Си» (Риз), который иллюстрирует передачу двухмерного указателя массива в функцию:

void display2DArray(int arr[][5], int rows) {
   for (int i = 0; i<rows; i++) {
      for (int j = 0; j<5; j++) {
         printf("%d", arr[i][j]);
      }
      printf("\n");
   }
}

void main() {
   int matrix[2][5] = {{1, 2, 3, 4, 5},{6, 7, 8, 9, 10}};
   display2DArray(matrix, 2);

Когда я проверяю переменную arr с помощью отладчика gdb во время выполнения, я получаю:

(gdb) p arr
$156 = (int (*)[5]) 0x7fffffffe1c0
(gdb) p &arr
$157 = (int (**)[5]) 0x7fffffffe198
(gdb) p *0x7fffffffe198
$158 = -7744

Что это за отрицательное число -7744?

Я думал, что разыменование адреса 0x7fffffffe198 должно дать 0x7fffffffe1c0?

1 Ответ

0 голосов
/ 01 июля 2018

Что это за отрицательное число -7744?

Это десятичное преобразование FFFFFFFFFFFFE1C0.

Я думал, что разыменование адреса 0x7fffffffe198 должно привести к 0x7fffffffe1c0?

Да, это так, но он преобразуется в десятичное представление.

Адреса памяти не являются отрицательными, но типы данных, используемые для представления областей памяти, могут быть.

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