php 를 주 언어로 사용하던 나에겐 포인터가 너무 생소하고 어렵다.
시작은 항상 쉽게 시작하지만 이걸 한번만 꼬아(?) 버리면 바로 머리속에 들어오지 않고
한참을 고민해야 머리속에 들어온다. 심지어 이해가 가지 않을때도 있다.
char k = 'a';
char y[5];
char* cp;
이건 char 형의 주소를 기억하는 cp 라는 변수명이다.
저곳에는 주소만 기억이 된다.
char 형 변수 k 에는 'a' 가 저장되어 있다.
char 배열형 변수 y 에는 5개의 메모리 주소가 저장되어 있다.
*y = k;
y 엔 첫번째에 a 가 저장되고 나머지 4개의 주소에는 나도 모르는 값들이 저장되어 있다.
cout << y;
해서 출력을 해 보면 나 같은 경우는
ajy??
이런 값이 출력됐다. a 는 내가 저장한 내용. 나머지는 이전에 메모리에 있던 값이다.
여기까지 오는것도 몇번 헤깔렸다. k 는 주소 하나를 가진 char 형 변수 이기 때문에 a 라는 문자열 하나가 저장되어 있고
y 에는 5개의 주소를 가지는 char 형 변수다.
k 를 y 에 대입할때
y = k;
는 에러가 난다. y 는 주소를 기억하고 있단다. 그래서 y 에 대입시킬땐
*y = k;
이렇게 해야 대입이 된다. 게다가 y 변수에는 시작주소가 기억되어 있기 때문에
시작되는 주소에 k 의 내용이 써진다.
*y 하는 이유는 ? y 는 주소 값이기 때문에 그것의 내용이라는 뜻에 * 를 붙인다.
결국 y = k 의 내용은 k 의 값을 y 의 주소에 넣어라. 인데 값을 주소에 넣을수 없게 되어 있다.
그래서 오류가 난것이고 k 앞에 * 를 붙여 줌으로써.
y 주소의 값에 k 값을 넣어라 라고 시키면서 저장이 된것이다.
그리고 다음.
char* cp;
이 내용은 char 형 주소를 기억하는 변수 cp 를 가지고 있다. 하나의 주소만을 기억할수 있다.
그래서
cp 를 cout 으로 출력하면 a 로 시작을 하는 5자리의 문자열이 출력된다.
근데 궁금한게 생겼다.
char* cp;
는 주소를 기억하고 있다.
*cp 는 cp 의 주소에 있는 값이라는 뜻이다.
그럼 cp 의 값을 출력하려면.
cout << *cp;
이거 아닌가 ??
또 헤깔리기 시작했다. 잠시 쉬었다...... 가야겠다....
'DEV' 카테고리의 다른 글
MacBook 에 우분투16.04 를 설치하고 wifi 설정 (0) | 2020.02.07 |
---|---|
[UBUNTU] ls 한글파일명 깨짐 (0) | 2019.01.15 |
우분투18.04 redis 설치 (0) | 2018.09.12 |
rc.local 이 안되는경우. [ ubuntu 16.04 ] (0) | 2018.06.02 |
[우분투] virtualbox 가상머신에서 시간동기화 제거. (0) | 2017.11.16 |