2015년 7월 3일 금요일

20150703 포인터와 배열의 관계

배열의 이름은 배열의 시작 주소 값을 의미(이름자체가 주소)하며,
그 형태는 값의 저장이 불가능한 상수이다.
배열의 이름은 '상수 형태의 포인터'이다. 그래서 배열의 이름을 가리켜
'포인터 상수'라 부르기도 한다.
★메모리 주소는 -가 없다!(unsigned)

Symbol Table
type      Value      Address
int        a            1000
int[ ]     b[0]        2000
int[ ]     b[1]        2004

b는 배열 전체의 이름(주소[번호])

// printf("arr[0]=%d\n", arr[0]);
// printf("arr[0]=%d\n", *arr);
// printf("arr[0]=%d\n", *p);

위 3개의 출력 결과는 같다!!

int arr[4]={1, 2, 3, 4};
int *p;
printf("*&arr[0]=%08X\n", *&arr[0]);
printf("*&arr[0]=%08X\n", *(arr+0));
printf("*&arr[0]=%08X\n", p[0]);
printf("*&arr[0]=%08X\n", *(p+0));
// printf("*&arr[0]=%08X\n", *&p[0]); //이것도 실행결과는 같음

출력값은 *&arr[0]=00000001

위 4개의 출력 결과는 같다!!(주소값을 참조하고 또 주소값을 참조하기에 결과값은 1)
속도 또한 같으므로 위 4개중 개인이 알아보기 쉬운걸 사용하면된다! 섞어도 됨!

포인터를 대상으로하는 증가 및 감소 연산은
int형 포인터를 대상으로 n증가 n * sizeof(int)의 크기만큼증가(4)
double형 포인터를 대상으로 n증가 n * sizeof(double)의 크기만큼증가(8)
감소 연산도 위와 같다!

댓글 없음:

댓글 쓰기