C언어 - 배열에 쓰이는 대괄호 쌍
글쓴이: 최명수 (13576)@Google / 작성시간: 토, 2018/10/13 - 11:50오후
함수를 공부하면서 매개변수로 배열을 선언할 때 (예를 들어 정수형 배열이라 할 때)
int arr[]이 int *arr과 같은 뜻이라는 것을 알게 되었습니다.
따라서 지금까지 배운 내용들로 보면 배열을 선언하거나 사용할 때
대괄호([]) 안이 비어있는 경우가 2가지라고 판단할 수 있었습니다.
(아까 언급했던 매개변수를 정의할 때의 배열을 나타냄을 강조 / 배열을 정의할 때의 크기의 생략)
그런데 이것들 말고도 배열의 대괄호 안이 비어있는 경우가 있는지 알고 싶어졌습니다.
물론 배워가면서 알게 되겠지만, 처음에 배열에 대해 몰랐을 적에는 많이 헷갈렸던 내용이였기에 미리 끝내버리고 싶습니다.
Forums:
int arr[] vs int *arr
세벌 https://sebuls.blogspot.kr/
메모리 주소는 같을 수 있지만... 연산자와의 관계는...
직접 코딩하면서 확인해보시면 조금 더 재밌지 않을까 생각합니다.
만약 int arr[] 과 int *arr 이 같은 역할을 할 수 있다면...
이를테면 int arr[5]; 를 선언하고, int *brr; /* 언어 유희입니다. */ 를 선언한 후, brr 에 arr[]++ 을 할당해보면 어떨까요? (C99 문법에선 arr[] 식의 표현은 쓰지 않고 대신 arr 이 &arr[0] 과 주소값은 같습니다.)
메모리 주소는 같을 수 있지만, 언어의 규격을 결정할 때, 필요에 따라 연산자와의 관계가 다르기 때문에 선언의 방법이 별도로 생겼다고 생각합니다.
기능을 구현하는데 필요한 명령문, 연산자, 포인터와의 관계에 따라 선언할 방법에 차이가 생기는게 아닐까요?
다들, 질문에서
다들, 질문에서
"함수를 공부하면서 매개변수로 배열을 선언할 때"
이걸 놓치신 듯 싶네요.
ㅎㅎㅎ 그렇네요.
매개변수로 선언한 자료형으로 본다면 충분히 같다고 생각할 수 있겠네요.
소스코드를 읽다보면, 두 경우를 구분해서 사용하는 사람과 혼용해서 사용하는 사람들을 보게 되는데, 구분해서 사용하는 사람들은 arr[]을 연속된 메모리 공간을 가리키는 데에 사용하고 *arr은 링크드리스트와 같은 객체타입을 지정하는데 사용하고는 합니다. arr이라고 이름붙여 놨지만 실제론 array는 아닌 셈이죠.
혼용한다 하더라도 언어엔진이 객체의 메모리 범위를 한정해주다보니 큰 문제는 없지만, 코드를 읽으면서도 섬세한 사람들의 감수성을 옅볼 수 있는 것 같습니다.
int * const arr 식으로 매개변수를 주고
int * const arr 식으로 매개변수를 주고 받을 곳에서 arr[] 로는 ?
C99부턴 int arr[const]가 있습니다.
C99부턴 int arr[const]가 있습니다.
감사합니다.
감사합니다.
댓글 달기