헷갈리는 포인터와 배열 확실하게 잡자

컴퓨터/C언어 2012. 12. 17. 01:13

포인터 너무 난해하죠..? 저는 C언어를 공부하면서 처음으로 고비를 느낀게 포인터에서였는데요... 처음엔 이걸 도대체 왜 쓰는거야? 이런 생각도 많이 했는데 지금 보면 포인터는 정말 대단하고 좋은놈이에요 !

우리도 한번 포인터의 매력에 빠져볼까요?


포인터 ? 그거 * 아니야 ?

네 *이 맞습니다. 

int a = 10;

int * ptr = &a;

이런 선언이 있다면 여기서 *과 &이 의미하는건 뭘까요? 일단 익숙한 &부터 볼까요? 어디서 많이 본것같은이놈은 바로 scanf 에서 입력을 받을 때 사용하는 놈이었죠? 그 때 &은 주소값을 의미한다고 배웠습니다. 그러면 ptr은 a의 주소값을 담고있다 라고 생각할 수 있겠네요. 그런데 a는 int형이죠? 그래서 앞에 int를 쓰고 주소값을 담고 있다는 뜻으로 * 을 쓰는거죠 ! 이제 위의 문장이 어느정도 이해는 가시나요?


포인터 도대체 왜 쓰는거야 ?

이놈의 포인터... 대체 왜쓰는 걸까요? 이유야 정말 많습니다... 함수부분에서 call by value와 call by reference를 배우셨나요? 안 배우셨으면 한번 읽어보세요 ~


· call by value

- 함수의 매개변수를 복사해서 사용 ... 실제 메인함수에서 전달한 매개변수에 영향을 끼치지못함

· call by reference

- 함수의 매개변수를 포인터 즉 주소값으로 사용 ... 포인터로 간접접근해서 메인함수에 영향을 미침


외에도 포인터를 사용하는 이유를 열거해 보자면

- 함수로부터 하나 이상의 값을 리턴 하기 위하여 

- 한 함수에서 다른 함수로 배열이나 문자열을 편리하게 보내기 위하여 

- 배열을 쉽게 다루기 위하여 

- 메모리에 있는 정보를 쉽게 다루기 위하여 

- 복잡한 자료 구조를 효율적으로 처리하기 위해 

- 호출하는 함수의 매개 변수의 값을 호출당하는 함수에서 변경하기 위하여 

- 배열로 생성할 수 없는 데이터를 생성하기 위해 

- 메모리 공간을 효율적으로 사용하기 위해

등등 진짜 셀수 없이 많습니다. 포인터의 필요성은 자료구조와 알고리즘을 배우다 보시면 느끼시게 될 겁니다. ㅎㅎ


설정

트랙백

댓글