공부하면서 요긴하였던 배열과 포인터 관련 팁들 1.
******************** 글 보시기 전 참고사항 ********************
우선 제 글을 읽어주셔서 감사합니다.
저는 코딩 전문가가 아니라 일개 컴퓨터공학을 전공하며, 컴퓨터 언어를 사랑하는 대학생입니다.
이 블로그는 제가 자주 들여다보고 싶은, 그리고 이렇게 생각하면 편하여서 사람들과 공유하고 싶은
그런 저만의 노하우를 담아놓는 공간입니다.
그렇다보니 전문 지식이 아니라 저의 생각 위주로 글이 게시됩니다.
제가 드리고 싶은 말은 제 글이 정답이 아니기에, 읽으시는 분께서 선별적으로 읽어주셨으면 하는 것입니다.
명확히 문제가 되는 부분, 제가 잘못 알고 있는 부분은 지나치지 마시고
귀찮으시더라도 댓글 한번 달아주시면 감사하겠습니다.
******************************************************************
배열명 + 1 이런식으로 하면 배열명[1]의 주소가 된다.
arr + 1 이라고하면 행 부분이 빠져있다. 행부분을 넣는다는게 어떤 것이냐
arr[0] + 1 처럼 하면 행부분을 지정해준 것이다.
arr[0]+1 의 타입은 int * 인 반면에
arr + 1의 타입은 int (*)[4] 이다. 행이 없어서 행의 자리를 지정해주는 것이기에 뒤에 열부분은 [4]라고 채워진다.
.
==>> 타입을 알아야 하는 이유: 아래 부분에 나오겠지만 포인터변수에 배열을 대입하려면 타입을 생각해야한다.
arr이라고만 하면 3*4 영역 전체를 가르키게되고 (3*4*4 = 48 bytes)
arr[0] 이라고 하면 행은 지정된 상태이므로 나머지 열 4개 * 4 = 16bytes
arr[3][4] 가 전체 배열이라면, arr[1]이라고만 써놓으면 arr[1]+0과 같다 고로, 첫번째 사진에서의 설명과 같이
배열명+0 처럼 되어
arr[1][0]의 주솟값이 된다.
arr[a][b][c] 라고 하면 a개의 {}와 a-1개의 ,(콤마)를 통해 자리를 마련해주고
a개의 각 {}안에 또
b개의 {}와 b-1개의 ,(콤마)를 통해 자리를 마련해주고
b개의 각 {}안에 또
c개의 {}와 c-1개의 ,(콤마)를 통해 자리를 마련해주라.
int arr[4]; 의 경우는 포인터로 가져갈 때 int *p = arr; 처럼 하고
int arr[3][4]; 같은 경우 포인터로 가져갈 때 타입을 이용한다 ! int (*p)[4] = arr;