본문 바로가기

겪은 문제들

C프로그래핑 - 배열의 사이즈 계산

#define STACK_SIZE 10
typedef int element;
element stack[STACK_SIZE];

void printStack(element stack[]) {
    printf("sizeof stack : %d\n",sizeof(stack));
    printf("sizeof element : %d\n",sizeof(element));
}

난 이걸 실행하면 당연히 int형 배열 stack의 사이즈가 10이니까.

sizeof(stack)은 10(배열의 크기)*4(int의 크기)로 40이 나올 줄 알았다.

그러나 생각했던 값과는 다른 값이 나왔고, 검색해서 찾다보니 링크 이런 글이 나왔다.

 

보자마자 아차 싶었다. 당연히 안되는 게, 매개변수로 배열을 넘겨주면 배열의 주소값이 넘어가게 된다.

그러므로 배열의 크기*자료형의 크기인 40이 아닌 주소지의 값의 사이즈가 출력된 것이다.

 

너무 오랜만에 c언어를 만져서 그런 것도 있겠지만, 개념을 제대로 안 잡은 탓이 큰 거 같다.

배열은 대입할 때 주소지를 반환한단 건 알고 있었는데 막상 함수를 쓰니까 까먹게 됐다. 주의해야겠다.

시간 날 때마다 까먹지 않게 포인터 연산자도 봐둬야 겠다.

포인터 연산자

 
728x90
반응형