2016-05-25 4 views
0

Когда я запускаю эту программу, вывод составляет 4 байта. (Я использую 64 битный компилятор)динамически распределенный переменный размер

#include <stdio.h> 
#include <stdlib.h> 

int main(void) { 
    int *b; 
    b=(int*)malloc(10*sizeof(int)); 
    printf("%d",sizeof(b)); 
    return 0; 
} 

Но не должно быть на выходе 40 байт, как я динамически выделять 40 байт пространства для «B»?

+3

** Указатель не является массивом **. – haccks

+0

Указатель не является массивом. Я понял. Но есть ли способ, которым я могу знать, сколько байтов выделено для b? –

+0

Он печатает размер самого указателя. (Что составляет 4 байта, 32 бит. Вы уверены, что в 64-битном компиляторе?) Нет способа (переносного и стандартного) для получения размера блока, выделенного кучей, после его распределения. – HolyBlackCat

ответ

0

Нет; он должен быть таким же, как printf("%zu", sizeof(int *));, который на вашей реализации составляет 4, независимо от того, какое значение вы назначаете b, поскольку b имеет тип int *, а не int [10].

Смежные вопросы