05-19 00:03
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

코딩일지

포인터란 무엇인가에 대한 고찰 본문

코딩/C언어

포인터란 무엇인가에 대한 고찰

여유거북이 2018. 5. 8. 00:02

 

 

 

1.포인터는 과연 무엇인가?

 

 

 

포인터라는 말을 처음 들었을 땐 화살표( -> )로 가리키는 것? 이라는 생각이 제일 먼저 들었는데 막상 포인터를 배우고 나니 조금은 비슷한 개념인 것 같아서 이름이 왜 포인터인지 알 수도 있을 것 같았다.

 

포인터란 우리가 사용하던 일반 변수처럼 값을 저장하는 것이 아닌, 원하는 값이 저장된 컴퓨터의 메모리상의 주소를 저장하는 것이다.

 

, 포인터는 메모리 주소를 저장하고 특정 자료형으로 그 주소에 접근하기 위한 자료형인 것이다. 포인터 변수에는 메모리 주소를 담을 수 있는 크기가 필요한데 64비트 운영체제에선 8비트를 의미하므로 크기는 8비트로 잡힌다.

   

처음에 내가 포인터를 듣고 생각한 화살표 ->를 쓰는 경우도 있었다. 함수 내부에서 구조체 멤버변수에 접근하려면 구조체변수->멤버변수이런 형식으로 쓴다. 포인터는 정말 말그대로 어떤 값을 가리키는 화살표 역할을 한다고 생각하고 시작하면 이해가 되는 것 같다.

 

  

 

 


 

 

 

 

2) 포인터는 과연 어떤 때에 가장 유용하게 쓰일까?

 

 

 

포인터는 동적할당에서 유용하게 쓰이고 다른 함수에서 값을 참조하여 사용하는 데에도 유용하게 쓰인다.

포인터변수 없이 일반변수를 함수 매개변수에 써서 넘기면 메인에서 호출했을 때 그 값을 받아오지 못한다.

 

하지만 이 상황에서 함수의 매개변수에 포인터변수를 설정하여 값을 넘긴다면 그 포인터변수의 값을 그대로 메인에서 받아올 수 있다.

 

간단한 프로그래밍은 포인터가 없어도 문제없이 해결이 가능하지만, 함수를 사용하여 값을 넘기거나 구조체 등 복잡한 프로그래밍을 할때는 포인터가 필요하다고 생각한다.

 

결국, 있어도 안쓰는 경우가 많긴 하지만 포인터가 없다면 해결 불가능한 프로그램이 있을 수 있다는 생각이다.

 

 

 

 

 


 

 

 

 

 

3. 포인터의 문법적 표현 방식

 

 

 

포인터 변수를 선언할 때는 변수 이름 앞에 *을 붙여주면 포인터 변수가 된다. 또한 피연산자의 주소값을 출력하려면 앞에 &를 써주면 된다.

 

ex) int *pnumber;  //포인터 변수 선언

int number = 2018;  //일반 변수 선언 & 초기화

pnumber = &number;  //number의 주소값을 포인터변수 pnumber에 저장

 

 

포인터를 선언할 때 초기화를 하는 것도 중요하다.

초기화 과정 없이 포인터 변수를 선언만 했다면 쓰레기값이 들어가므로 의미가 없다.

그러므로 포인터 변수의 초기화는 NULL값을 이용해서 하며 아직 아무것도 가리키지 않고 있다는 것을 알려줘야 한다.

여기서 NULL 대신 0을 써도 아무것도 가리키고 있지 않다는 의미이므로 같은 뜻이다.

 

ex)  int *pnumber = NULL;

int *pnumber2 = 0;

 

 

 

 

 

 

포인터는 어렵다. 하지만 정확한 정의와 목적을 알고 접근한다면 사실 어렵지 않다.

 

 

Comments