해당 내용은 Do it! 자료구조와 함께 배우는 알고리즘 입문 C 언어 편 (전면 개정판)을 기반으로 작성되었습니다.
2-1장 기본 자료구조 - 배열 : 포인터와 배열 (4/10)
포인터 pointer
- 객체 또는 함수를 가르키는 것
int *p; // p는 int형 객체를 가르키는 포인터
double *q; // q는 double형 객체를 가르키는 포인터
포인터의 자료형
- 포인터가 가르키는 곳의 객체의 자료형을 따라 간다.
- int*형은 int형 객체를 가르키는 포인터를, double*형은 double형 객체를 가르키는 포인터이다.
// n이 int형 객체일 때, p가 n을 가리키도록 함
p = &n; // p에 n의 주소를 대입
*p = 999;
- 간접 연산자인 단항 연산자 *를 사용하여 포인터 p가 가리키는 객체의 값에 접근할 수 있다.
- p가 n을 가르킨다면 *p는 p가 가르키는 곳에 있는 n값을 접근하는 식이다.
즉, *p는 n과 같다.
- p가 다른 객체 x를 가르킨다? == *p는 x와 같다
포인터와 배열
a 값과 &a[0] 값과 같다.
배열 a 와 포인터 p가 선언될 때
p의 초기화는 배열 이름인 a로 할 수 있다.
포인터 p가 배열의 요소 e를 가리킬 때
p + i 는 요소 e의 i개만큼 뒤쪽(오른쪽)의 요소를 가리키는 포인터가 되고,
p - j 는 요소 e의 j개만큼 앞쪽(왼쪽의 요소를 가리키는 포인터가 된다.
요소 e의 i개만큼 뒤쪽의 요소를 나타내는 *(p + i)는 p[ I ]로 표기할 수 있고,
요소 e의 i개만큼 뒤쪽의 요소를 나타내는 *(p - j)는 p[ -j ]로 표기할 수 있다.
아래 4개의 식은 모두 배열의 각 요소에 접근하는 식이다.
a[ i ] *(a + 1) p[ i ] *(p + i) // 첫 번째부터 i개 뒤쪽의 요소
아래 4개의 식은 모두 배열의 각 요소를 가르키는 포인터이다.
&a[ i ] a + 1 &p[ i ] p + i // 첫 번째부터 i개 뒤쪽의 요소를 가르키는 포인터
포인터가 배열의 첫 번째 요소를 가리키는 경우 그 포인터는 마치 배열처럼 동작한다.
즉, 포인터와 배열을 서로 바꾸어 쓸 수 있다.
배열의 최댓값 구하기
주사 traverse
- 배열의 요소를 하나씩 차례로 살펴보는 과정을 알고리즘 용어로 주사(traverse)라 한다.
- 데이터를 하나씩 지나면서 (달릴 주) 살피고, 조사하는(조사할 사) 일을 말한다.
- 스캐닝 (scanning)이라고도 한다.
- traverse = 가로지르다, 횡단하다.
NULL과 공백 포인터
- 공백포인터(NULL pointer)는 객체 포인터나 함수 포인터와는 다른 특별한 포인터이다.
- 정숫값 0은 모든 포인터형으로 형 변환이 가능하고 그 결과는 NULL 포인터이다.
- NULL은 값 0을 갖는 모든 정수, 상수 또는 상수식 void*로 형 변환한 식이다.
'SCHOOL > 알고리즘' 카테고리의 다른 글
2-1장 기본 자료구조 - 배열 : 증가 연산자 ++i / i++ (6/10) (0) | 2024.04.14 |
---|---|
2-1장 기본 자료구조 - 배열 : 기수변환 (5/10) (0) | 2024.04.14 |
2-1장 기본 자료구조 - 배열 : 메모리 할당, 동적 객체 (3/10) (0) | 2024.04.12 |
2-1장 기본 자료구조 - 배열 : 메모리구조 (2/10) (0) | 2024.04.12 |
2-1장 기본 자료구조 - 배열 : 자료구조, 배열 (1/10) (0) | 2024.04.12 |