프로그래밍

 3198, 1/160 회원가입  로그인  
   물먹자
   2차원 배열 질문좀요

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=2858 [복사]


2차원배열에서  int a[3][4];
a+1 = a[1][0]의 주소값 입니다
a[1] 도 마찬가지로  a[1][0]의 주소값이고요
근데

*(a+1)이것도  a[1],a+1과 같은 주소값이라고하는데 이해가안갑니다
*  <이 연산자가 붙어서 a[1]의 데이터 값을 출력하란 의미라고 생각하는데요 1차원배열에선 역시 그랬고요

왜  *(a+1)이 주소값이 출력이되는지 알려주세요

  Hit : 4705     Date : 2011/01/18 12:51



    
두루뭉술 배열의 이름이 배열의 첫번째 값을 가르킵니다 즉 a == a[0] == *a 입니다
고로 *(a+1) 는 a[1]입니다 이건 아시고 계시겠죠?

a[1][0] 번째 주소는 그림을 그려보시면 a[1]번째와 같습니다.
2011/01/18  
$Zero a + 0 은 뭐죠 ? a 죠 ?
1차원 배열이나 1차원 배열이나 모두 a로 인식하며 배열의 시작주소를 가집니다.
그리고 , a + 1 이라는 연산을하면 a는 주소값이기때문에 포인터 연산이 이뤄지며 1차원 배열의경우 해당 배열의 자료형에 따라 주소값의 증가범위가 달리지죠 .
2차원의 경우도 자료형의 영향을 받으며 , 두번째, 즉 2차원을 구성하는 [4] 부분만큼 건너뛰게됩니다.
총 16바이트 (32비트기준)를 건너뛰어서 a[1]이 되는것이지요 .
a[1]은 뭐지요 ? a[1][0]의 시작점입니다. 배열의 시작점을 출력하면 보통 주소가 나오죠 .
배열도 일종의 포인터라고 볼 수 있는데 이렇게 생각해보세요 .
2차원 배열은 더블(2차원) 포인터처럼 접근해야한다.
그리고 인덱스[] 연산자는 * 연산자와 비슷한 역할을 수행한다.
a[1] = *(a+1) 이란게 성립되죠 .
더블 포인터에 *를 한번했으니 1차원 주소가 나오게 될겁니다.
같은 원리에요 .
a[1][0] 과 같이 인덱스를 2번 하게되면 ** 와 같은 효과가 생기므로 값이 나오게 된답니다.
인덱스연산자도 주소의 값 참조해서 해당 주소가 가진 값을 출력한다고 생각하시면 그리 어려운 개념은 아니라고 생각하는데 . . 이해가 가실런지
만약 아직 더블 포인터를 안배우셨다면. . 포인터를 배우고나면 이해하기가 한결 쉬워지실겁니다 .
2011/01/18  
$Zero 2번째줄 ,
" 1차원 배열이나 2차원 배열이나 "
입니다. 오타 ..
2011/01/18  
물먹자 a[3][4]라는 선언을하고 a+1은 a[1][0]의 주소값입니다 근데 거기에 * 이 연산자가 붙으는데
* 이연산자는 가르키는 값의 메모리값을 참조하라는 뜻인데

*(a+1) 그럼 이뜻은 a+1이 란 주소가 가르키고있는 데이터값을 참조해라 이뜻인데

어떻게 a[1]과 같죠? a[1]과 a+1은 주소값이 같습니다 근데 *연사자가 붙어서 *(a+1)은 주소값이 가르키는 곳을 참조하라고 a[1]은 그냥 주소값인데... 잘이해가안가네요...
2011/01/22