2016-09-12 4 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 화 배열과 비 malloc 배열의 크기가 다른가요?

8 
16 

이유는 무엇입니까?

+0

첫 번째 포인터 : sizeof 포인터. 두 번째 : sizeof 배열 .... – LPs

+0

아마도 더 나은 중복 : http://stackoverflow.com/questions/492384/how-to-find-the-sizeofa-pointer-pointing-to-an-array – Lundin

+0

Ludin @ it 's about 더미. –

답변

2

Arrays are not pointers. 코드에서

, arr1arr2는 배열, 포인터이다.

유형이 arr1 인 경우 인 반면, arr2int [4]입니다. 따라서 sizeof은 다른 결과를 산출합니다. 코드는, sizeof 유형 size_t의 결과를 산출했다

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

동일합니다, 그래서 당신은 결과를 인쇄 할 %zu를 사용한다.

+0

힙 크기를 측정하는 방법, 힙에서 malloc 포인터는 무엇 이었습니까? –

+0

@ JeungwooPark 슬프게도, 반환 된 포인터에서 할당 된 메모리의 크기를 직접 알 수 없기 때문에, 자신을 추적해야합니다. –

0

arr1은 sizeof (arr1)를 호출 할 때 포인터입니다. 포인터의 크기가됩니다. 하지만 arr2는 4 개의 정수에 대한 메모리 블록을 나타냅니다.