혹시 틀린 부분이 있으면 지나가지 마시고 댓글로 지적해주시면 감사드리겠습니다. :-)
C언어에서는 문자열을 담는 자료형이 없으므로 두가지 방법으로 문자열을 담을 수 있다.
첫번째는 배열을 이용한것, 두번째는 문자열 주소값을 가진 포인터를 이용하는것.
이 그림과 같이 int a[3][5] 라는 2차원 배열이 있고,
a의 주소는 200이라고 가정했을때,
이 배열을 가르키는 포인터는
int(*p)[5] = a 가 된다.
int*p = a와는 다른데,
이 배열에서 a의 기본 단위는 20바이트가 되므로, a주소값은 200 이라면, a+1 주소값은 204가 아닌 220이 된다.
그러나 int*p = a라고 정의하면, p+1의 주소값은 220이 아닌 204가 되어버려, 1:1 대응이 안되고 다른 의미가 되어버린다.
따라서 int(*p)[5] = a 와 같은 형태로 지정한다.
근데 여기서 만약에
int* p[5] 라고 선언을 하면 어떻게 될까?
그럼 이건 포인터를 모아놓은 포인터 배열이 된다.
이 배열의 내부에는 포인터값(정수포인터) 만 담을 수 있다.
셋다 다른 개념인데 비슷하게 생겼으므로, 주의해야한다.