서늘한 이 감각, 이걸 또 보게 되다니 ㅠㅠ
포인터의 개념
- 변수의 메모리 주소 값을 말한다. 이 포인터를 담는 변수를 포인터 변수라고 한다.
- 포인터 변수가 어떤 변수의 주소를 저장하고 있다는 것은, 포인터 변수가 그 변수를 가리키고 있다를 의미한다.
- 포인터 변수를 이용하여, 연결된 주소의 변수 영역을 액세스 할 수 있다.
- 포인터 변수를 간단하게 포인터라고 부른다.
포인터의 사용 예제
int i;
int *ptr = &i;
자료형 *포인터이름; |
자료형 : 포인터 자체의 자료형이 아니라 포인터에 저장 할 주소에 있는 일반 변수의 자료형을 적는다.
*포인터이름 : 일반 변수 이름과 구별되도록 앞에 *를 붙여 포인터임을 나타낸다.
포인터 연산자
주소 연산자 : &
- 변수의 주소를 얻기 위해 사용한다
- 주소 연산자의 사용 형식은 이와 같다.
pointer = &var;
참조 연산자 : *
- 저장 된 주소에 있는 값을 액세스 하는 연산자이다.
- 참조 연산자의 사용 형식은 이와 같다.
*pointer = value;
var = *pointer;
포인터의 초기화
- 일반 변수를 초기화 하는 방법과 동일하다.
- 포인터에 주소를 지정하는 방법
- 주소 연산자를 사용하여 변수 주소를 지정한다.
int i;
int *ptr = &i; - 동적 메모리를 할당하고, 그 시작 주소를 포인터값으로 지정한다.
char *ptr = (char *)malloc(100); - 문자열 포인터에 문자열의 시작 주소를 지정한다.
char *ptr = "korea"; - 배열 이름을 이용하여 배열 시작 주소를 지정한다.
char A[100];
char *ptr = &A[0];
- 주소 연산자를 사용하여 변수 주소를 지정한다.
- 포인터에 주소를 지정하는 방법
포인터 배열
- 포인터 자료형을 배열로 구성한다.
- 선언 형식은 이렇게 생겼다.
int *pointerArr [size];
각 배열 요소는 포인터이다.
2차원 문자 배열을 1차원 포인터 배열로도 표현 할 수 있다.
char arr[3][10] = {
"hello",
"world",
"C"
};
이 형태가 일반 적이었다고 하면
char *arr[3] = {
"hello",
"world",
"C"
};
이게 가능하다.
- 2차원 배열
- 배열이 선언 될 때 지정한 크기의 배열 공간이 메모리에 할당된다.
- 한 번 할당된 배열의 크기를 줄이거나 늘리기 어렵다.
- 처음 선언한 배열의 크기보다 실제 사용 공간이 작으면 메모리가 낭비된다.
- 실제 필요한 공간이 할당 크기보다 크면 배열을 새로 만들어야 한다.
arr[3][10] | [0] | [1] | [2] | [3] | [4] | [5] | ||
Hello | H | e | l | l | o | EOL | ||
world | w | o | r | l | d | EOL | ||
C | C | EOL |
- 1차원 포인터 배열
- 저장하는 문자열의 길이에 따라 메모리가 할당된다.
- 저장할 문자열의 길이를 정확히 예측 할 수 없거나,
문자열의 길이가 자주 변하는 경우에 메모리를 좀 더 효율적으로 사용 할 수 있다.
*arr[3] | ||||||||
[0]Hello | H | e | l | l | o | EOL | ||
[1]world | w | o | r | l | d | EOL | ||
[2]C | C | EOL |
포인터의 포인터
왜 있는거야
- 포인터를 가리키고 있는 포인터. 이중 포인터이다.
- 포인터의 주소를 가지고 있는 포인터이다.
- 포인터의 포인터 선언 형식과 예는 이와 같다 :
int **ppttrr;
'컴퓨터 이론' 카테고리의 다른 글
포인터와 구조체 설명하기.. (2) | 2025.04.11 |
---|---|
Amortized Analysis : 분할 상환 (0) | 2025.04.04 |
Greedy (0) | 2025.04.04 |
[PY] 글로 벌 (0) | 2025.04.04 |
플로이드 워셜 (0) | 2025.04.03 |