2024.12.11 수요일. 포인터가 뭐고!! ******이거 나중에 다시 꼭 보자
1. 포인터
: 메모리의 주소 값을 담고 있는 변수 혹은 상수 ; 데이터 위치를 가리키는?
주소 : 메모리의 저장소의 위치를 나타내는 값. 하나의 주소값은 1바이트 크기의 메모리 공간을 표현
한 블럭(주소) 당 1 바이트의 메모리 공간 차지, 한개의 주소는 8비트가 묶임
2. 포인터 변수
: 메모리 주소를 저장하는 변수.
데이터 타입과 식별자(변수명) 사이에 *하나만 넣으면 포인터 변수가 됨.
&연산자를 변수명 앞에 가져오면 그 변수의 주소값을 반환
& 연산자 '어떤 변수의 주소를 알아내는 역할(포인터가 가리키는 메모리 공간의 접근)'
상수는 메모리에 위치하지 않으므로 주소가 없으며 & 연산자를 사용할 수 없다.
포인터 변수를 이용하면 프로그램이 간결하고 효율적,
그 포인터가 가리키는 변수의 자료형에 따라 타입을 맞추어 선언해야한다.
= 포인터 변수는 주소값만 저장할 수 있음.
A* => A가 가리키는 포인터 B의 주소값 참고,
A** => A가 가리키는 변수 (이중포인터. 포인터 변수를 가리키는 포인터)
포인터는 그럼 방이라고 설명하면 되는 걸까?
3. 포인터 연산
포인터끼리 더하기(의미X), 빼기(두 포인터 간의 거리) 가능
포인터에 정수 더하기 빼기 대입 가능
= 포인터가 가리키는 변수 데이터 타입의 크기 * 정수 만큼 증가
비교도 가능 (앞에 있는가 뒤에 있는가 ;; 앞>뒤)
4. 포인터 배열
: 포인터 변수로 이루어진 배열
포인터와 배열은 밀접한 관계가 있음.
배열의 이름 = 배열의 시작 번지를 갖는 포인터 상수 = 첫번째 원소의 주소값
**** 이건 나중에 한 번 다시 공부할 것
5. 동적 메모리 할당
|
동적 메모리 할당
Dynamic Memory Allocation
|
정적메모리 할당
Static Memory Allocation
|
|
실행 시간 동안 사용할 메모리 공간의 할당
|
사용하지 않아도 프로그램을 실행할 때
프로그램에서 필요한 메모리 공간을 확보
|
|
malloc
이걸 사용해서 입력받은 숫자의 크기만큼
바이트 단위로 힙 영역에 메모리 공간을 할당
+ 할당된 메모리 공간의 주소값 반환
|
ex) 전화번호
길어도 15자 이내로 고정.
char PhoneNumber[15];
이런식으로 표현하는게 가능
|
|
메모리 필요량을 전혀 예측할 수 없는 경우가 존재
|
고정된 메모리 공간을 할당
-> 메모리 낭비 있을 수 있음.
|
** malloc ; 힙 영역에 메모리 공간을 할당할 수 있게 도와주는 함수
500바이트가 필요하다면 malloc(500); 이렇게 호출해 사용 가능 (상수가 아닌 변수의 사용도 가능)
void * malloc(size_t size) // 성공 시 할당된 메모리의 주소 값, 실패시 NULL 반환
※ 리턴 타입이 void* 형이므로 직접 포인터의 형을 결정해야하며,
메모리 공간 할당 이후 free라는 함수로 반드시 직접 해지해야함.
(그렇지 않으면 메모리 공간 낭비 발생. 다 쓴 공간을 쓸 필요가 없으니 해제할 것.)
※ malloc로 메모리 공간을 할당하면 할당된 메모리에 NULL(쓰레기값)이 들어있으나 calloc로 메모리 공간을 할당하면 전부 0으로 초기화하기 때문에 calloc를 자주 쓰기도 함.
6. const 포인터
: const 키워드를 이용해 포인터, 변수 등을 상수화 할 수 있음.
|
const int num = 50;
|
const int *num;
|
int *const num;
|
const int *const num;
|
|
변수의 상수화
|
상수 지시 포인터
|
포인터 상수
|
포인터와 가리키는 값
모두 상수화
|
|
한 번 초기화한
num 값 변경 불가
|
num이 가리키는 값
변경 불가
|
포인터 주소값 변경 불가
가리키는 값 변경 허용
|
주소값, 가리키는 값
모두 변경 불가
|
'C++' 카테고리의 다른 글
| 커스텀 변수 연산자 오버로딩 (0) | 2025.06.17 |
|---|---|
| 정렬용 비교 함수 객체 (0) | 2025.06.17 |
| 배열 (0) | 2025.06.17 |
| 제어문, 반복문 (0) | 2025.06.17 |
| 변수+기본구성 (2) | 2025.06.17 |