포인터는 말 그대로 어딘가를 나타내는 것이라 생각하면 조금 편하다.
그 어딘가는 바로 메모리의 주소이다.
우리는 지금까지 scanf를 통해 값을 입력 받을 때 &를 붙여주고는 했다.
&은 메모리 주소를 나타낸다. 그래서 우리가 값을 입력받던 과정을 나타내면
이렇게 작동했던 것이다.
그렇다면 문자열의 입력의 경우 왜 &를 붙여주지 않는 것일까?
사실 배열도 문자열처럼 메모리 주소를 담고있기 때문이다.
그 예시가 하나 있다.
배열을 함수의 인자로 넘겨주게 되면 배열의 첫 번째 위치의 메모리 주소가 전달된다.
변수가 처음 선언될 때 메모리 주소도 같이 할당되므로 변수의 값이 바뀌어도 메모리 주소는 달라지지 않는다.
배열의 경우에는 예를 들어 int(4바이트)형으로 int arr[30]; 인 경우 맨 처음 시작 메모리 주소가 0인 경우 0, 4, 8, 12 .... 이런식으로 메모리가 연속적으로 자료형 크기만큼 떨어져서 할당된다.
그렇다면 2차원 배열의 메모리 할당은 어떻게 될까??
https://codingdog.tistory.com/entry/c언어-2차원-배열-메모리-상에-어떻게-저장이-될까요 해당 블로그가 아주 잘 설명 해 주었다.