배열의 이름은 배열의 시작 주소 값을 의미(이름자체가 주소)하며,
그 형태는 값의 저장이 불가능한 상수이다.
배열의 이름은 '상수 형태의 포인터'이다. 그래서 배열의 이름을 가리켜
'포인터 상수'라 부르기도 한다.
★메모리 주소는 -가 없다!(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)
감소 연산도 위와 같다!
댓글 없음:
댓글 쓰기