인프런 커뮤니티 질문&답변
배열이 매개 변수로 사용 될 때 포인터로 바뀔 때 내부 상황이 궁금합니다.
작성
·
206
0
포인터에 배열이름으로 배열의 첫 주소를 저장할 때와 같은 배열이름이 포인터처럼 작동할 때는 메모리를 사용하는 게 아니라 단순히 컴파일러가 변환시켜주는 것으로 알고 있습니다.
그런데 매개변수로 사용할 때는 그 크기가 포인터의 크기로 나오면 메모리에 실제로 포인터 변수가 만들어진 건가요? 그게 아니라면 어떻게 sizeof연산자를 사용했을 때 포인터의 크기가 나오는지 잘 모르겠습니다.
퀴즈
C 언어에서 표준 배열의 요소들은 메모리에 어떻게 저장될까요?
서로 떨어진 위치에 임의로 저장된다.
링크드 리스트 형태로 연결되어 저장된다.
연속적인(contiguous) 메모리 공간에 저장된다.
스택에 쌓이는 형태로 저장된다.
답변 1
1
포인터 변수를 만들어주기보단 #define 처럼 단순히 코드를 치환해주는 것일거에요!
매개변수를 int arr[] 로 썼더라도 전처리 과정에서 int * arr 로 코드 문장을 바꿔주는..
그렇기에 사실 포인터 변수를 만들어준다기보다는 매개변수 int arr[] 는 애초에 원래 포인터입니다. int arr [] 로 코드를 써도 문법상 허용해주는 그런 차원인 것입니다.





