포인터
- 다른 변수, 혹은 그 변수의 메모리 공간주소를 가리키는 변수 포인터도 하나의 타입
- 메모리에 직접 접근, 제어 가능 (즉, 포인터 = 메모리 주소와 연관되어 있는 문법)
- 포인터 변수의 크기는 운영체제의 bit 수에 따라 달라짐 32bit(4byte) / 64bit(8byte)
- NULL, nullptr 키워드를 이용하여 초기화 가능
초기화가 이루어지지 않는 경우, 임의로 저장된 주소의 값에 마음대로 접근해서 변경해버리면,
최악의 상황에는 프로그램 메모리가 꼬여서 프로그램이 날아갈 수 있기 때문에 초기화가 중요!
char *pc = NULL; // char형 변수의 주소 값
int *pi = nullptr; // int형 변수의 주소 값
double *pd; // double형 변수의 주소 값
포인터 변수의 크기가 항상 같지만, 데이터 타입을 선언하는 이유
그 주소값을 찾아갔을 때, 얼만큼 읽어야 할지 알기 위해서!
int a = 10;
int * ptr = &a; // a의 주소를 ptr 포인터 변수에 저장
// ptr(a의 주소)로 가서
// *ptr (그 주소에 해당하는 값을)의 값을 100으로 변경
*ptr = 100;
printf("변경후 a의 값 : %d", a); // 100
ptr(a의 주소)에 해당하는 값 10을 100으로 변경
포인터 변수가 가리키는 주소 값으로 찾아가서 그곳의 value 값을 변경
메모리 주소
#include <stdio.h>
int main(){
int n = 10;
double d = 3.141592;
}
포인터 연산
- +, - 연산 진행시 포인터의 타입에 따라 결과가 달라짐
- ex) int 형 변수 0x7ffdc24ae874+ 1 = 0x7ffdc24ae878
int main(){
int arr[] = {1,2,3,4,5,6,7,8,9,10};
for (int i = 0; i < 10; i++){
printf("%x\n", &arr[i]);
}
int* ptr = arr;
for(int i = 0; i < 10; i++){
printf("%d\n", *ptr);
ptr++;
}
}
'언어 > C, C++' 카테고리의 다른 글
[C++] Standard Template Library - STL (0) | 2023.08.24 |
---|---|
[C++] 객체 지향 프로그래밍 (0) | 2023.08.16 |
[C++] new, delete (0) | 2023.08.14 |
[C++] 참조자(reference) (0) | 2023.08.14 |
[C++] namespace (0) | 2023.08.11 |