О шестнадцатеричном результате ab, где каждый является указателем на массив - PullRequest
0 голосов
/ 21 ноября 2018

Я думаю о том, как получается следующий фрагмент 0xc?Разве это не должно быть c0-90=30?Я запускаю его на ideone.com .

#include <stdio.h>

int main(void) {

    int a[10] = {0};
    int b[10] = {0};
    printf("sizeof(a) = %d\n", (int)sizeof(a));
    printf("%p, %p\n", (void *)(a+10), (void *)(b+10));
    printf("a = %p; b = %p\n", (void *)a, (void *)b);
    printf("a-b = %p", (void *)(a-b));

    return 0;
}

Результат:

sizeof(a) = 40
0x7ffcabb73ce8, 0x7ffcabb73cb8
a = 0x7ffcabb73cc0; b = 0x7ffcabb73c90
a-b = 0xc

1 Ответ

0 голосов
/ 21 ноября 2018

Когда вы вычитаете указатели, вы получаете разницу в местах , а не разницу в байтах

Таким образом, вы получаете 0x7ffcabb73cc0 - 0x7ffcabb73c90 = 0x30 байтов

Разделив это на 4 байта на целое число, вы получите 0x0c целых чисел

...