(자료구조) 3-2 포인터
자료 구조 - 포인터
.
1. 포인터
1) 정의
- 변수의 메모리 주소값
- 포인터 변수
- 주소값을 저장하는 특별한 변수
- 변수가 어떤 변수의 주소를 저장하고 있다는 것은 포인터 변수가 그 변수를 가리키고 있다.
(포인트하고 있다.)는 의미
2) 포인터 변수
- 포인터 변수를 이용하여 연결된 주소의 변수 영역을 액세스 함
- 포인터 변수를 간단히 포인터라고 함
(1) 의미
- 편지봉투에 받는 사람의 집주소를 쓰면, 그주소로 편지가 전달되어 집주인이 편지를 받게 된다.
- 편지봉투 : 포인터 변수
- 편지봉투에 쓰는 받는 사람 주소 : 포인터 변수에 저장된 변수의 메모리 주소
- 주소에 해당하는 집주인이 편지를 받는 것 : 포인터 변수를 통한 변수의 엑세스
(2) 예
int i; ........ // (1)
int *prt = &i; ....// (2)
- (1)에서 변수 i를 선언했을 때에 저장된 메모리 번지를 150번지라고 한다면,
- (2)에서 변수 i의 주소를 포인터 변수 ptr에 저장하면 ptr에는 메모리 주소 150이 저장되므로,
포인터 변수 ptr은 150번지의 변수 i를 가리키는 상태가 됨.
3) 포인터 변수 선언
- 포인터 선언 형식
자료형 *포인터 변수이름
--- -----------
(1) (2)
(1) 자료형
- 포인터 변수 자체의 자료형이 아니라, 포인터 변수에 저장할 주소에 있는 일반 변수의 자료형
(2) 포인터 변수 이름
- 일반 변수이름과 구별하여 변수이름 앞에
'*'
를 표시하여 포인터 변수임을 표시
(3) 포인터 변수의 자료형에 따른 메모리 액세스 범위
char *ptr; // (1) 1byte
short *ptr; // (2) 2byte
int *ptr; // (3) 4byte
4) 포인터 연산 - &
- 주소 연산자 : &
- 변수의 주소를 구하기 위하여 사용
- 변수 앞에 &를 사용하여 그 변수의 주소를 사용
- 사용할 주소 영역의 변수와 포인터 변수는 같은 자료형으로 선언
포인터 변수 = &변수;
(1) 주소 연산자 사용 예
int i = 10;
int *ptr;
ptr = &i;
5) 포인터 연산 - *
- 참조 연산자 :
*
- 저장된 주소에 있는 값(변수에 저장된 값)을 액세스하는 연산자
(1) 사용 방법 1
- 지정한 값을 포인터가 가리키고 있는 주소에 저장
* 포인터 변수 = &변수;
(2) 사용 방법 2
- 포인터가 가리키는 주소에 있는 값을 변수에 저장
변수 = *포인터 변수;
(3) 사용 예
int i,j;
int *ptr;
ptr = &i; // (1)
*ptr = 10; // (2)
j = *ptr; // (3)
6) 포인터의 초기화
- 초기화
자료형 *포인터 변수 = 초기값 주소;
(1) 포인터 초기화 방법 1
- 주소 연산자를 사용하여 변수의 주소 지정
int i;
int *ptr = &i;
(2) 포인터 초기화 방법 2
- 동적 메모리를 할당하고 그 시작주소를 포인터 값으로 지정
char *ptr = (char *) malloc(100);
(3) 포인터 초기화 방법 3
- 문자형 포인터에 문자열의 시작주소를 지정
char *ptr = "korea";
(4) 포인터 초기화 방법 4
- 배열의 이름을 이용하여 배열시작주소를 지정
- 배열 이름은 문자열과 마찬가지로 그 시작주소를 전달할 수 있음
char A[100];
char *ptr = A;
(5) 포인터 초기화 방법 5
- 배열의 첫 번째 요소의 주소를 사용하여 배열 시작 주소를 지정
- 인덱스로 표시하는 배열의 각 요소는 그 이름만으로는 주소를 전달 할 수 없기 때문에
주소연산자 &를 사용
char A[100];
char *ptr = &A[0];
2. 문자 배열 vs 포인터 배열
1) 포인터와 문자 배열
- 포인터를 사용하여 문자열 연산 처리
ptr1 = string1;
(1) 거꾸로 찍어 보기 예제
for(i = 16; i >= 0; i--){
putchar(*(ptr1 + i))
}
2) 포인터 배열
- 포인터 자료형을 배열로 구성
- 여러 개의 포인터를 하나의 배열로 구성한 배열의 특징과 포인터의 특징을 모두 활용 가능
- 포인터 배열이 선언형식
자료형 * 포인터배열이름[배열크기];
- 포인터 배열에서 각 배열요소는 포인터
- 2차원 문자배열을 1차원 포인터배열로 표현
- 2차원 배열의 행의 개수 : 포인터 배열 크기
- 포인터 배열의 각 배열요소
- 각 문자열에 대한 시작주소를 가진 포인터
(1) 2차원 배열 예제
char string[3][10] = {"Dreams","come","true!"};
(2) 1차원 포인터 배열
char *ptr[3] = {{"Dreams"},{"come"},{"true!"}};
3. 포인터의 포인터
1) 정의
- 포인터를 가리키는 포인터 (즉, 이중 포인터)
2) 선언 형식
자료형 **포인터변수이름
char **ptr;
3) 예제
char *ptrArray[2];
char **ptrptr;
ptrptr = ptrArray;
댓글남기기