Nick_is_asking Ответов: 1

Вопрос с про размер()


Привет.У меня есть приведенная ниже программа на языке Си, и я хочу, чтобы вы помогли мне кое-что понять.
Код:

Что я уже пробовал:

    char x, s[5], *p = NULL;
    int y, a[10], *q = NULL;p = &x;
    q = a;
    printf("char: %ld, int: %ld\n",  sizeof(char), sizeof(int));
    printf("x: %ld, y: %ld\n",  sizeof(x), sizeof(y));
    printf("s: %ld, a: %ld\n",  sizeof(s), sizeof(a));
    printf("p: %ld, q: %ld\n",  sizeof(p), sizeof(q));
    printf("*p: %ld, *q: %ld\n",  sizeof(*p), sizeof(*q));
}



с выходом:
char: 1, int: 4
x: 1, y: 4
s: 5, a: 40
p: 8, q: 8
*p: 1, *q: 4


Единственное, чего я не могу понять, почему это происходит, - это p: 8, q: 8
64-битная система
Почему?
Спасибо.

1 Ответов

Рейтинг:
7

Rick York

p и q являются указателями, а в 64-разрядной системе указатель имеет длину 8 байт или 64 бита. Данные, на которые они указывают, имеют разный размер в их случаях, но это не имеет отношения к размеру указателя. Указатель всегда будет иметь длину восемь байт в 64-разрядной системе, независимо от того, на что он указывает.


Nick_is_asking

Я понимаю.Спасибо!

CPallini

5.