1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
 
void reversePrint(int arr[])
{
    int *p;
    int i;
    int size;
 
    p = arr;
    printf("sizeof(arr) == %d \n"sizeof(arr) );
    printf("sizeof(p) == %d \n"sizeof(p) );
 
    size = sizeof(arr) / sizeof(arr[0]);
 
    printf("### size = %d ### \n", size);
    
}
 
int main(void){
    int arr[7= {-10010,20,30,40,50};
    int i, size;
 
    size = sizeof(arr) / sizeof(arr[0]);
    printf("### size = %d ### \n", size);
    
    reversePrint(arr);
 
    return 0;
}
 
 
cs


출력결과


### size = 7 ###

sizeof(arr) == 4

sizeof(p) == 4

### size = 1 ###

계속하려면 아무 키나 누르십시오 . . .



어... main에서 
    size = sizeof(arr) / sizeof(arr[0]);

를 쓰면 size == 7인데


reversePrint( int arr[]) 에 인자로 넣어서 

    size = sizeof(arr) / sizeof(arr[0]);

를 쓰니까 size == 1이 되네요


함수에 인자로 갈 때 &arr[0] 가 전달되서 그런 거 같은데

질문 : 그럼 main에서 쓰는 arr은 &arr[0]가 아닌 무언가 인가요? 왜 main에서 sizeof(arr)은 4*7이죠?


확실히 main에서 쓰여진 arr은 주소값이 아닌 것 같은데, 주소값은 무조건 int니까 sizeof(주소값)은 4가 되어야 하잖아요

그럼 저건 뭐죠>?