포인터
다른 변수, 구조체, 객체 등 가리키는 변수로서 메모리의 주소와 직접적으로 연관
#include<iostream>
using namespace std;
int main()
{
int a = 10;
int* ptr; // 아직 아무것도 가리키지 않은 위험한 상태
ptr = &a; // 주소를 넣어 줌
cout << "ptr가 가리키는 값 : " << *ptr << endl;
*ptr = 20;
cout << "변수 a의 값 : " << a << endl;
return 0;
}
- 정수형 포인트 변수를 가리키기 전 유효값이 없는 상태로 두면 오류를 낳음
- 때문에 가리키는 대상이 없을 땐 그것을 알 수 있도록 nullptr를 넣어 줌
- 위에서 포인터 변수 *ptr에 값을 넣는다는 것은 정수형 변수 a에 값을 넣는 다는 뜻
- 기본 자료형 뿐만 아니라 구조체 및 객체에서도 사용 가능
* const 한정어 사용 가능
int a = 10, b = 20;
const int *ipt = &a;
*ipt = 30; // error
ipt = &b; // ok
- a가 const가 아니더라도 사용가능 하지만 값을 대입 하는 건 안 됨 리터럴이니까
- 중간에 포인터 주소를 변경 하는 것은 괜찮다
int a = 10;
const int b=20;
int *pt1 = &a; // OK
int *pt2 = &b; // error
const int *pt3 = &b; // OK
- pt2를 이용해서 변화시키려 할 수도 있기 때문에 error 포인터에 const 변수 주소를 넣으려면 포인터 또한 const여야 함
int *intPtr; // int형 포인터의 선언
intPtr = new int; // int 값을 저장할 공간 할당
*intPtr = 10; // 할당된 공간을 사용
...
delete intPtr; // 공간 반환
inPtr = nullPtr; // nullPtr 지정
// 선언시 자유메모리(Heap)에 저장
// 반환 했다는 것은 삭제가 아니라 내가 사용하지 못 한다는 뜻
// nullPtr 지정이유 : 지역 변수의 경우 사라지는데 반해, 전역 변수의 경우 프로그램이 돌아가는 내내 갖고 있게 됨
// * 배열 일 때 포인터 사용 법
int *intPtr;
intPtr = new int[4];
*intPtr = 10;
*(intPtr + 1) = 20; // 다음 방에 20을 할당
// 연산자 보다 포인터의 우선순위가 높아서 괄호 안에 써줘야 함
intPtr[2] = 30; // intPtr + 3과 동일
...
delete [] intPtr;
intPtr = nullptr;
'개발일지 > React & C++' 카테고리의 다른 글
[C++] 참조 (0) | 2023.09.17 |
---|---|
[React : 05] Component (1) | 2022.03.20 |
[React : 04] 이벤트 리스너 ( 좋아요 버튼 ) (0) | 2022.03.17 |
[React : 03] state를 이용해 글 목록 만들기 (0) | 2022.03.15 |
[React : 02] JSX (0) | 2022.03.14 |