자 일단 제목은 무서워 보입니다. 네. 포인터는 아주 무서운 놈이죠. 불가능을 가능으로 만드는 장점은 있지만, 우리 뇌를 어지럽게 만드는 단점도 있습니다
일단 포인터 변수에 대해서 알아볼게요
int *p
자... 여기서 또 무서운 게 나오죠. 갑자기 변수 앞 p에 별*이 붙었습니다. 이 별은 곱하기의 *이 아니라 이 p라는 변수가 포인터 변수라는 뜻입니다. 그럼 선언 방법을 알아봤으니 어떻게 이용하는지 알아볼까요?
int a, *pa; pa = &a; *pa = 100; printf("%d", a); // result: 100
여기에서 또 이상한 부분이 나옵니다. &a가 갑자기 또 왜 나오죠? 제가 예전에 설명을 안 드렸었는데, 이 &는 '참조 연산자'; 주소값 연산자입니다. 모든 변수는 컴퓨터 안에 있는 데이터베이스에 저장되어 있습니다. 필요할 때는 그걸 꺼내서 사용하는 것이죠. 그런데, 이 변수에는 다 번호가 있습니다. 그러니까 저장 번호 같은 것이죠. 그게 바로 주소값입니다. 포인터 변수는 주소값을 가지고 있는 변수입니다. 그래서 그냥 pa를 놓고 값을 구하려면 주소값을 넣어줘야겠죠. &a는 '변수 a의 주소값'을 뜻합니다. 그러니까 포인터 변수 pa는 a의 주소값을 가지고 있게 되는 것이죠. 이 때 *pa가 100이라고 하면 이 *은 '역참조 연산자'입니다. 그러니까 pa가 가지고 있는 주소값에 *을 붙이게 되면 그 변수의 값; a의 값을 뜻하게 되는 거죠(어렵죠? 네, 이해합니다). 이렇게 해서 a의 값을 100으로 정하고 출력하는 것입니다. 아주 복잡합니다. 그런데 이걸 이용하면 함수에서 call by reference(다른 함수의 지역변수 조종하기)를 할 수 있습니다. 그건 다음 시간에 알려드릴게요. 그런데 여기는 너무 복잡하고 어려워서 조금 복습을 하시고, 실제로 프로그램도 짜보시면서(TMI: 저는 Visual Studio보다는 Code Blocks를 추천합니다. 자세한 건 인터넷에 다 있어요) 다음으로 오시기 바랍니다^^;