기록장
[C++][자료구조] 포인터 개념정리 본문
정수 변수 | 정수 저장 | int a; |
포인터 변수 | 주소 저장 | int* p; |
<포인터 선언>
- 포인터 변수 선언
int* pi; // int 변수의 메모리 위치를 알려주는 포인터 pi선언
float *pf; // float 변수의 메모리 위치를 알려주는 포인터 pf선언
- 여러 개의 포인터 변수 선언
char* p, q, r; // p는 char* 변수, q와 r은 char 변수
char *p, *q, *r; // p, q, r 모두 char* 변수
* 사용하기 전에 반드시 초기화되어야 함
<다양한 포인터>
int *pi; | pi는 정수 변수를 가리키는 포인터 |
float *pf; | pf는 실수 변수를 가리키는 포인터 |
char *pc; | pc는 문자 변수를 가리키는 포인터 |
test *ps; | test 타입의 객체를 가리키는 포인터 |
void *p; | p는 void type의 포인터 |
- 포인터 형 변환
void *p;
int* pi = (int*)p;
<*연산자>
예시:
아래 표와 같은 포인터와 변수가 있다
int* pi | int i | |
내용 | 0xFE00 | 20 |
주소 | 0x8B00 | 0xFE00 |
&연산자 : 변수의 주소
* 연산자 : 포인터가 가리키는 곳의 내용(변수의 내용)
int i = 20;
int *pi;
pi = &i;
cout << *pi << endl; // *연산자(변수의 내용) 출력: 20
cout << pi << endl; // 포인터의 내용, 출력: 0xFE00
cout << &pi << endl; // &연산자(변수의 주소) 출력: 0x8B00
예시2
int a = 10, b = 4;
int* p, * q;
p = &a;
q = &b;
*p = 8; // *p == a의 내용 = 8
*q = *p + 2; // *p == b의 내용 = a의 내용 + 2
cout << *q << endl; // 출력: 10
<포인터 연산자>
int* pi | int i | |
내용 | 0xFE00 | 20 |
주소 | 0x8B00 | 0xFE00 |
p | 포인터 변수 | |
*p | 포인터가 가리키는 값 (변수(i)의 내용) | |
(*p)++ | 포인터가 가리키는 값을 증가 (변수(i)의 내용 증가) | |
*p++ | p++ | 포인터 변수 증가 (주소 증가) |
*p-- | p-- | 포인터 변수 감소 (주소 감소) |
예시
#include <iostream>
using namespace std;
int main() {
int i = 10;
int* p = &i;
// 1
cout << "*p " << *p << " " << p << endl;
// 2
*p++;
cout << "*p++ " << *p << " " << p << endl;
// 3
*p--;
cout << "*p-- " << *p << " " << p << endl;
// 4
(*p)++;
cout << "(*p)++ " << *p << " " << p << endl;
return 0;
}
*p == i의 내용
p == p의 내용 == 변수의 주소
이다
~설명~
// 1
*p는 10이다. p는 i의 주소이다
// 2
*p++; 로 인해 p의 내용, 즉 i의 주소였던 값이 바뀌었다. 따라서 p가 가리키는 변수가 더이상 i가 아님.
출력 사진에서 *p++ 옆을 보면 숫자가 10에서 완전히 다른 값으로 바뀌었다.
// 3
*p--; 로 p의 내용, 즉 주소값이 다시 i의 주소로 돌아왔다.
따라서 *p가 i의 내용인 10이 됨.
// 4
(*p)는 i의 내용이다. i의 내용(*p)가 10에서 11이 되었음을 알 수 있다.
'코딩 공부 > C++' 카테고리의 다른 글
[C++][자료구조] 연결 리스트로 구현한 큐 이해하기 (한줄씩 설명, 포인터) (0) | 2023.04.04 |
---|---|
[C++][자료구조] 동적 메모리 할당 (변수, 배열) (0) | 2023.04.03 |
[C++][자료구조] 스택을 이용한 후위연산 (3) | 2023.03.31 |
[C++] string 클래스 함수들 정리 (0) | 2023.03.29 |
[C++][자료구조] HW03 (0) | 2023.03.28 |