Как выяснить, сколько байтов используется для хранения переменной в C с помощью оператора sizeof? - PullRequest
0 голосов
/ 08 марта 2012

У нас есть следующий код:

#include <stdio.h>
#define LEN 10

int main(void) {
    int i;
    int array[LEN];
    int *p;
    for (i = 0; i < LEN; i++) {
        array[i] = i;
    }
    for (p = &array[0]; p < &array[LEN]; p++) {
        printf("Address: %p   ", p);
        printf("Value: %d\n", *p);
    }
    return 0; 
}

И он просит нас выяснить, сколько байтов сервер использует для хранения целочисленной переменной, и вывести ее на новую строку, и это дает нам подсказкуиспользовать sizeof.

Теперь я немного новичок с указателями, так что это, вероятно, очень быстрый вопрос, но я должен напечатать:

printf("Size of int: %d", sizeof(p));

или sizeof(*p)

Один печатает 4, а другой печатает 8. Я склонялся к 8 (что происходит от просто p), поскольку это относится к ячейке памяти, а не к переменной, на которую оно указывает значение, верно?И 8 будет означать 8 бит, поэтому ответом будет 1 байт?

Ответы [ 2 ]

3 голосов
/ 08 марта 2012

Простым решением вашей конкретной проблемы является использование sizeof в имени типа:

sizeof(int)
sizeof(int *)

Вы получите ответы на свои вопросы без путаницы.

3 голосов
/ 08 марта 2012

p - указатель на int, поэтому sizeof (p) показывает, сколько байтов потребляет указатель. Таким образом, размер int (ваш вопрос) вы получите на

sizeof(*p)
...