int ary[3];
ary == &ary[0];
int arr[3];
arr + 1;
>> arr + (1*sizeof(*arr))
int arr[3];
int *pa = arr;
pa[1] = 10;
>> arr[1] = 10;
arr++; (x)
pa++; (0)
void main(void){
int arr[3];
int i;
*(arr + 0) = 10;
*(arr + 1) = 20;
printf("키보드 입력 => arr[3] : ");
scanf("%d", arr+2);
for(i=0; i<3; i++){
printf("%5d\n", *(arr + i));
}
return 0;
}
배열요소 표현식(arr[1]) == 포인터 연산식(*(arr+1))
int arr[3];
int i;
int *pa = arr;
*pa = 10;
*(pa+1) = 20;
pa[2] = pa[0] + pa[1];
for(i=0; i<3; i++){
printf("%5d\n", pa[i]);
}
>>> 10 20 30
int arr[3];
int *pa = arr;
sizeof(arr); // 12바이트 (배열 전체 크기)
sizeof(pa); // 4바이트 (포인터 하나의 크기)
포인터를 증가 연산식으로 증가시킬 수 있고 다음 배열요소를 간단히 출력할 수 있다.
pa = pa + 1; 또는 pa++;
만약 배열을 할당한 포인터로 다시 처음 배열의 값부터 데이터를 처리해야한다면 배열명으로 다시 초기화해야한다.
배열명은 주소값이 상수로 그 값이 변하지 않으므로 언제든지 배열의 시작 위치를 찾아가 사용할 수 있다.
++(*pa) // 전위형, 결과는 11, 12, 13 출력
(*pa)++ // 후위형, 결과는 10, 11, 12 출력