2016-09-12 9 views
1
#include<stdio.h> 
#include<stdlib.h> 

int main (int argc, char *argv[]) { 

    int* arr1 = (int*)malloc(sizeof(int)*4); 
    int arr2[4]; 


    printf("%d \n", sizeof(arr1)); 
    printf("%d \n", sizeof(arr2)); 

    free(arr1); 

    return 0; 
} 

ВыходПочему размер массива malloc-ed и не-malloced-массив различны?

8 
16 

Почему?

+0

Первый: указатель размера. Второй: sizeof array .... – LPs

+0

Возможно, лучший дубликат: http://stackoverflow.com/questions/492384/how-to-find-the-sizeofa-pointer-pointing-to-an-array – Lundin

+0

Ludin @ это о куча. –

ответ

2

Arrays are not pointers.

В коде arr1 является указателем, arr2 является массивом.

Тип arr1: int *, тогда как arr2 имеет тип int [4]. Таким образом, sizeof дает разные результаты. Ваш код эквивалентен

sizeof (int *); 
sizeof (int [4]); 

Это сказало, sizeof дает результат типа size_t, так что вы должны использовать %zu для печати результата.

+0

Как измерить размер кучи, что было указателем malloc на куче? –

+0

@JeungwooPark, к сожалению, вы не можете напрямую знать размер выделенной памяти из возвращаемого указателя, вам нужно следить за собой. –

0

arr1 - это указатель, когда вы вызываете sizeof (arr1), это размер указателя. , но arr2 представляют собой блок памяти для 4 целых чисел.