15. 배열과 포인터
15-1 배열과 포인터 표기법
배열 표기법과 포인터 표기법의 관계 - 두 문법은 표기만 다를 뿐 문법 구조는 비슷하다.*(data+1)
의 의미는 data[1]
과 같다.
배열 표기법의 한계 - 배열 표기법 대신 포인터 표기법을 사용하여,
형 변환 문법을 사용하여 원 자료형의 포인터 크기를 (char*형)로 줄일 수 있고,
이 포인터 크기로 배열의 1바이트 메모리 영역만 변경할 수 있다.
15-2 배열 시작 주소
배열의 경우 첫 요소인 data[0]의 시작 주소가 배열 전체의 시작 주소와 같기 때문에 포인터 지정할 때
char data[4];
char *p = &data[0];
/*위의 포인터는 아래와 같이 줄여 쓸 수 있다. */
char *p = &*(data + 0);
char *p = &*(data);
char *p = data;
하지만 배열은 포인터가 아니다. 배열의 이름은 변수처럼 보이지만 실제로는 상수화된 주소로 변경할 수 없다.
15-3 배열을 사용하는 포인터
포인터로 배열의 주소를 저장하여 사용 - 사실 컴파일러의 최적화 능력이 좋아져서 큰 의미는 없지만, 그래도 좋은 습관을 들이려면 자주 신경 쓰자.
15-4 배열과 포인터의 합체
쉽게 생각해서 포인터가 100개 필요한 경우 하나씩 나열하여 쓰는 것은 너무 불편하니, 배열로 선언해서 사용하자.char *p[5]
와 같은 형식으로 사용, 이는 char *(p[5])
와 같은 의미로 생각하면 된다.
즉, 포인터가 5개 배열의 형태로 선언된 것
하지만, char (*p)[5]
의 의미는 다르다. 여기서 p 변수는 배열이 아니라 포인터이고, 포인터 변수 p가 가리키는 대상의 크기가 char[5]에 의해 5바이트라는 의미가 된다.
복잡하게 생겼는데, 2차원 배열을 가리키는 용도로 사용한다.
'Programming Language > Do it! C언어' 카테고리의 다른 글
[Do it! C언어 입문] 17장. 다차원 포인터 (0) | 2022.11.11 |
---|---|
[Do it! C언어 입문] 16장. 메모리 할당 (0) | 2022.11.11 |
[Do it! C언어 입문] 14장. 표준 입력 함수 (0) | 2022.11.11 |
[Do it! C언어 입문] 13장. 포인터 (0) | 2022.11.11 |
[Do it! C언어 입문] 12장. 배열과 문자열 (0) | 2022.11.11 |