지금 계속 삽질을 하고 있는데 도저히 이해가 안가서 질문 드립니다 ㅠㅠ..
포인터를 배운지 얼마 안되서 좀 신기해 하고 있는데..
어떤 프로그램을 짜던중에 갑자기 '2차 배열을 가리키는 포인터의 배열이 있을까?'이게 궁금해져서 계속 검색하다 보니..
http://pelex529.blogspot.kr/2009/01/2.html 이렇게 배열 포인터라는 것과 등가 포인터라는 것을 알게 되었습니다.
또
http://unixwiz.net/techtips/reading-cdecl.html여길 통해서 정말 별 이상한 선언을 할 수 있다는 것도 알았고, 이를 이용하면
2차 배열을 가리키는 포인터의 배열이 있을 수 있겠다는 생각이 들었습니다.
일단 이 문제는 나중으로 미루고.. 지금 당면한 문제는..
'배열 포인터를 포인터 연산 형식으로 쓰고 싶다!' 입니다. 무슨 얘기냐 하면
int a[5] 라는 배열이 있으면
*ptr = a를 통해 a의 주소를 ptr에 담습니다. 여기서 임의의 i(i < sizeof(a))에 대해서 ptr + i를 하게 되면 우리는 a배열의 모든 요소를 득템할 수 있는데
배열 포인터를 통해서도 하고 싶은 겁니다.
위의 사진에서 53번 행부터가 그 시도인데..
일단 52번 까지는 제가 예상했던 대로 결과가 나왔습니다. (사실 이것도 이해가 잘 안가기는 합니다. arr2[0]이면 arr2[0][0]의 주소를 가리켜야 하는거 아닌가요? 크기는 왜 6이고 값은 또 왜 이러는지....)
(일반 배열과 포인터를 구문하기 위해 일반 배열이나 변수는 값을 value로, 포인터가 들어가 있으면 그냥 reference로 나타냈습니다.)
왜 (c + 1)[0] 이 3이 나오는지 잘 모르겠습니다;;
c라는 배열이 arr2를 가리킨다면 (c + 1)[0]이면 arr2[1][0]와 같은 의미여야 하지 않나요??
c[0][1]이 arr2[0][1]인 것처럼 말이죠. []이 연산자에 대해 알아 봐야 할까요..?
지금 더블 포인터도 모르겠는데 그것까지 질문하면 너무 많겠죠??;;;
요약합니다.
Q1. c는 크기가 2인 char형 배열을 가리킬 수 있는 포인터 입니다. 이를 포인터 연산을 통해 각 요소를 접근하고 싶은데 왜 (c + 1)[0]이 arr[1][0]이 안되는가?
Q2. 그렇다면 []연산자를 사용하지 않고 배열 포인터 c를 포인터 연산만을 사용해서 arr2[1][1]과 같은 각 요소를 접근할 수 있는 방법은 없는가?
이렇게 입니다.