|  |
| |
| geniousblue |
2번은 연산자 우선 순위를 보시면 알겠지만
[] 의 우선순위가 *(포인터)의 우선순위보다 높습니다.
따라서 int *(risks[x]); 로 번역이 되구요. 이것은 예상하신듯이 int형을 가리키는 포인터 x개 배열이 맞습니다.
3번의 경우에는 포인터의 크기를 정해주는 것입니다.
예를 들어 int* risks; 라는 변수가 있고, 이 값이 0x0012FF10 이라고 가정합니다.
risks++를 하게 되면 컴파일러는 risks변수가 4byte 값인 int 형을 가리키고 있기 때문에 4의 주소를 증가시켜 0x0012FF14를 가리키게 합니다. 그런데 int (*risks)[3] 인 경우라면 risks++를 하였을 때에 risks변수가 int 3개를 가진 행렬을 가리키고 있으므로 12byte가 증가하여 0x0012FF1C를 가리키게 됩니다.
4번의 경우는 역시 우선순위에 따라 int형을 가리키는 2차원 배열입니다.
5번은 이차원 배열 크기만큼 증가시킬 수 있도록 선언된 포인터구요. (3번과 비슷합니다)
6번은 우선순위에 따라 z만큼의 int형 변수(즉 4byte * z)를 가리키고 있는 x개의 배열이 선언된 것입니다. |
2011/01/24 |
|
| $Zero |
인덱스([]) 연산자도 포인터 연산자입니다. * 와 같은 연산자라고 보시면 되요 .
다른점이 있다면 인덱스 안에는 정수를 기입할수 있다는거지요 .
이 정수의 역활은 포인터 연산입니다.
주소값을 변경한다는 뜻 .
그럼 [3]이면 포인터의값을 +3만큼 증가시킨뒤 그곳에서 * 연산을 해라 라고 해석하시면됩니다.
즉 배열이 아니어도 포인터라면 [] 연산자를 사용할 수 있습니다.
*와 같은 연산자이면서 부가적인 연산(포인터 이동)을 수행할수 있는 연산자이니까요 . |
2011/01/25 |
|
| $Zero |
위에 *와 []를 같이 사용했다는건 , 더블포인터나 2차원 배열 이겠네요 .
아시죠 ? 2차원 배열도 더블포인터라는것을.
arr[0][0]은 결국 **arr 과 똑같은 것입니다. |
2011/01/25 |
|
| 테라바이스 |
고맙습니다 ^^ |
2011/01/25 |
|