[C++] 포인터Language/C++2022. 6. 5. 11:22
Table of Contents
Introduce
지금까지 했던 방식
int x = 1;
- x라는 이름의 4byte 정수 타입의 바구니를 만들고, x라는 변수를 스택 메로리에 할당했다.
즉, x바구니에 1이라는 숫자를 넣으라는 의미
- 스택 메모리에 있는 특정 주소(x바구니)에 우리가 원하는 값을 넣는 셈.
- x를 비유하자면 메모리에 이름을 붙인 것이다.
- call by value에 의한 계속되는 복사의 문제 [원본을 직접 안건드리고 복사를 해서 건드린다.]
[한계점] : 원본 수정이 필요할때 ... >> 포인터의 사용
포인터의 개념
- 바구니는 바구니인데 [주소]를 저장하는 바구니이다.
- 변수를 선언할때 *가 등장했다. >> 주소
int *ip = &x;
근데.. 남의 주소를 갖고 뭘 할까 ?
- [주소를 저장하는 바구니]가 가리키는 주소로 가서 무엇인가 해라.
- *변수이름 = 값 ;
- *는 사용시점에 따라서 구분해서 기억해야한다.
- 1. 변수를 선언할때 : 주소를 저장하는 바구니를 만든다.
- 2. 사용할때 [포탈타고 해당 주소로 순간이동]
int y = *ip;
*ip = 0;
포인터 연산
주소연산자
& : 해당 변수의 주소를 알려주세요
int number = 1;
int *pointer = &number;
산술연산자
number += 1;
pointer += 1;
- number에 1을 더하면 2가 된다.
- pointer에 1을 더하면 pointer가 가리키고 있는 변수의 크기만큼 증가한다. (int의 경우 4byte이므로 4증가)
간접연산자
* : 포탈 타고 순간 이동
*pointer = 2
간접멤버연산자
struct Player
{
int hp; // +0 위치에 hp 저장.
int damage; // +4 위치에 damage 저장
};
Player player;
player.damage = 100;
player.hp = 100;
Player *playerptr = &player;
(*playerptr).hp = 200;
(*playerptr).damage = 200;
playerptr->hp = 300; // 위 표현과 완벽히 동일.
playerptr->damage = 300;
return 0;
}
'Language > C++' 카테고리의 다른 글
[C++] OOP(객체지향)의 개념 (0) | 2022.06.06 |
---|---|
[C++] 참조 (0) | 2022.06.05 |
[C++] 포인터 실습 (0) | 2022.06.05 |
[C++] 메모리 구조 (0) | 2022.06.05 |
[C++] 기본구성요소와 문자열 (0) | 2022.06.05 |
@Return :: Return
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!