포인터
조무위키
주의. 이 문서는 공머생들이 좋아하는 주제 혹은 공머생 그 자체에 대해 다룹니다. 본 문서가 다루는 내용에 지나치게 탐닉할 경우 필연적으로 여성들과 멀어지게 됩니다. 이는 조무위키가 책임지지 않습니다. |
프로그래밍의 개념
대표적으로 C에서 이걸 쓴다.
C 공부할때 보통 여기서 많이 막히는데 막상 이해하면 존나쉽다.
모든 변수나 상수는 기본적으로 메모리에 저장이 된다.
메모리는 기본적으로 고유의 이름(주소)를 가지고 있고, 거기에 일종의 별명을 부여하는 게 변수의 선언 원리다.
포인터에 대한 연산자는 곱셈기호이기도 한 '*'를 쓰는데, 타입과 포인터접근 두가지의 의미로 사용이 된다.
예시 코드
int var=20;
int* ptr=&var;
printf("%p ₩n %d",ptr,*ptr);
여기에서 int*는 int타입 변수의 주소값을 담을 수 있는 '타입'이라는 의미이다. 기본제공 타입을 비롯해 사용자 정의 타입에 이르기까지 모든 타입에 포인터형을 사용할 수 있다.
그리고 포인터타입은 전부 기본적으로 4바이트 공간을 차지한다.
그리고 int*타입 포인터변수 ptr에 &var이라는 값을 저장한다. 여기서의 &은 해당 변수의 주소값을 반환하는 연산자다.
이렇게 되면 ptr은 var이라는 변수의 주소값을 가지는 포인터변수가 된다.
그러면 이제 ptr을 통해 var이라는 변수에 본질적으로 접근할 수 있다.
- ptr;
이러면, ptr에 담긴 주소값을 참조해 20이라는 값을 찾아내어 반환한다.
그러면 이것을 어떨때 사용할까?
보통 다른 함수들과 상호작용을 할때 많이 쓴다.
C언어의 함수 파라미터는 기본적으로 '값'만을 복사하기 때문에
A라는 함수에서 X라는 변수를 함수 B에 전달하고, 함수 B에서 전달받은 X의 값을 변화시킨다고 하더라도 A 내의 X값은 전혀 변하지 않는다.
B에 전해진 값은 X 메모리 공간 자체가 아니라, X에 담긴 '값'뿐이기 때문이다.
아 시발 귀찮다 아무나 이어서 써라