|  |
| |
두루뭉술 |
배열의 이름이 배열의 첫번째 값을 가르킵니다 즉 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 |
|