
'&' 연산자
- 이항 연산자 : 비트 논리 연산자 AND(c = a & b;)로 사용
- 단항 연산자 : 변수 이름 앞의 주소 연산자(&c)로 사용
'*' 연산자
- 자료형 선언 : 포인터 변수를 만들기 위한 연산자(char *cp;)로 사용
- 메모리 값 표현 : 메모리 주소 앞에 사용하는 경우 메모리(값)을 의미하는 연산자(*cp)




cp = &c; //1차원 포인터 변수 cp는 1차원 char형 메모리 주소 &c를 가지고 있고,
cpp = &cp; //2차원 포인터 변수 cpp는 2차원 char형 메모리 주소 &cp를 가진다. (4byte)
*cp = *&c = c //cp는 1차원 char형 주소이므로, *cp는 1byte 변수 c와 같은 메모리이고,
**cpp = **&cp = *cp //cpp는 2차원 char형 주소이므로, **cpp는 1byte 변수 c와 같은 메모리이다.

np = &n; //1차원 포인터 변수 np는 1차원 int형 메모리 주소 &n를 가지고 있고,
npp = &np; //2차원 포인터 변수 npp는 2차원 int형 메모리 주소 &np를 가진다. (4byte)
*np = *&n = n //cp는 1차원 int형 주소이므로, *np는 4byte 변수 n와 같은 메모리이고,
**npp = **&np = *np //cpp는 2차원 int형 주소이므로, **npp는 4byte 변수 n와 같은 메모리이다.

np는 int형 1차원 포인터 변수, npp는 2차원 포인터 변수, nppp는 3차원 포인터 변수이고,
*np, **np, ***npp는 모두 int형 변수 n과 같은 메모리 4byte이다.
Windows에서 단일 프로세스는 총 4GB 크기의 가상 메모리를 가질 수 있고,
주소는 00000000부터 FFFFFFFF(16진수)까지를 사용한다.
가장 큰 주소(0xFFFFFFFF)가 4byte를 넘지 않으므로, 포인터 변수(4byte)에 모든 주소를 저장 가능

c는 char형 변수이고, &c는 1차원 char형 주소이고,
&cp는 2차원 char형 주소이고, &cpp는 3차원 char형 주소이다.
&c(b3fbc3)에 +1한 것은 char형(1byte)을 건너뛰겠다는 의미로 1이 증가(b3fbc4)하고,
&cp(b3fbc4)에 +1한 것은 char형 주소(4byte)를 건너뛰겠다는 의미로 4가 증가(b3fbc8)한다.
또한, &cpp(b3fbc8)에 +1한 것은 char형 주소(4byte)를 건너뛰겠다는 의미로 4가 증가(b3fbcc)한다.
그러므로 2차원 포인터 변수 이상에 +1을 하면 모두 4가 증가한다.

c는 char형 변수이고, cp는 1차원 char형 주소, cpp는 2차원 char형 주소이다.
c(0x41)에 +1한 것은 정수 1을 가산하라는 의미로 1이 증가(0x42)하고,
cp(30fbe7)에 +1한 것은 char형(1byte)만큼 건너뛰겠다는 의미로 1이 증가(30fbe8)하고,
cpp(30fbd8)에 +1한 것은 char형 1차원 주소(4byte)만큼 건너뛰겠다는 의미로 4가 증가(30fbdc)한다.

n은 int형 변수이고, &n은 1차원 int형 주소이고,
&np은 2차원 int형 주소이고, &npp는 3차원 int형 주소이다.
&n에 +1한 것은 int형(4byte)을 건너뛰겠다는 의미로 4가 증가하고,
&np에 +1한 것은 int형 1차원 주소(4byte)을 건너뛰겠다는 의미로 4가 증가하고,
또 &npp에 +1한 것은 int형 2차원 주소(4byte)을 건너뛰겠다는 의미로 4가 증가한다.

n는 int형 변수이고, np는 1차원 int형 주소, npp는 2차원 int형 주소이다.
n(0x14)에 +1한 것은 정수 1을 가산하라는 의미로 1이 증가(0x15)하고,
np(6ff700)에 +1한 것은 int형(4byte)만큼 건너뛰겠다는 의미로 4이 증가(6ff704)하고,
npp(6ff6f4)에 +1한 것은 int형 1차원 주소(4byte)만큼 건너뛰겠다는 의미로 4가 증가(6ff6f8)한다.
2장 내용 정리
- 포인터는 주소를 저장하기 위한 메모리 공간(변수)이다.
- 포인터의 크기는 모두 4byte이다.
- 2차원 포인터 변수는 포인터 변수는 1차원 포인터 변수의 주소를 저장하기 위한 메모리 공간(변수)이다.
- n차원 포인터 변수는 포인터 변수는 n-1차원 포인터 변수의 주소를 저장하기 위한 메모리 공간(변수)이다.
- n차원 포인터 변수는 *연산자를 n개 붙여 값(메모리 공간)에 접근한다.

*cp = *&c = c //Z
*np = *&n = n //100

char형 변수 c의 값과 char형 포인터 *cp 메모리(값) 사이즈는 1이고 char형 포인터 cp의 메모리 사이즈는 4이다.
int형 변수 n의 값과 int형 포인터 *np 메모리(값) 사이즈는 4이고 int형 포인터 np의 메모리 사이즈는 4이다.



'cs > c-pointer' 카테고리의 다른 글
[열혈강의] 03. 배열 (0) | 2022.01.24 |
---|---|
[열혈강의] 01. 변수와 메모리 (0) | 2022.01.06 |