728x90
#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
반응형
'겪은 문제들' 카테고리의 다른 글
인코딩 키와 디코딩 키 중에 무엇을 써야할까? (2) | 2024.09.07 |
---|---|
윈도우10 Docker for Desktop WSL2 is not installed (0) | 2021.06.27 |
git push freezing 정지 (0) | 2021.06.20 |