프로그래밍2008. 4. 25. 19:02
반응형
화살표 연산자, 화살표(->) 연산자

포인터를 통하여 구조체나 변수에 접근하는 것은 매우 많이 사용되는 방법이다. Type에 상관없이 포인터를 선언하는 방법은 아래와 같이 동일하다. 

 

 Type *변수명;


예를 들어, 다음 예제는 s_type이라는 구조체를 정의하고 두 개의 변수를 선언한다. 첫번째 변수 s는 s_type 구조체 변수이고, 두번째 변수 p는 s_type의 구조체 포인터 변수이다.

struct s_type {
    int i;
    char str[80];
} s, *p;

이와 같이 정의된 경우, 다음 문장은 s의 주소를 p에 치환한다.

p = &s;

p가 s의 주소값(&)을 가리키고 있으므로, p를 통하여 s에 접근할 수 있다. 그러나 p를 이용하여 s의 각 원소를 접근하기 위해, 도트연산자(.dot operator)를 사용할 수 없다. 대신에, 다음 예와 같이 화살표 연산자(-> arrow operator)를 사용해야 한다.

p->i = 1;

 cf> 도트 연산자는 구조체 포인터 변수가 아닌 구조체 변수의 원소에 접근할 때 사용

상기의 코드는 p를 통하여 s의 원소 i에 값 1을 치환한다. 화살표 연산자는 -기호와 >기호를 같이 써서 나타낸다. 두 기호 사이에 공백이 있으면 안된다.


* 구조체 포인터 변수를 사용하는 이유.

 - 구조체 변수를 선언하여 포인터나 화살표 연산자 없이 도트 연산자를 이용하면 될 듯한데, 굳이 구조체 포인터 변수를 사용해 혼란스럽게 하는 이유는 뭘까?

  ==> c는 구조체 전체를 함수에 전달할 수 있다. 그러나, 구조체의 크기가 클 경우, 함수의 파라미터나 리턴값을 통한 구조체의 전달이 프로그램의 실행속도를 현저하게 감소시킬 수 있다(스택 사용). 이러한 이유 때문에 큰 구조체를 사용할 때 구조체 자체를 전달하는 것 대신에 구조체 변수의 포인터 전달이 가능한 상황에서는 포인터를 전달하는 것이 속도면에서 훨씬 좋다.


* 결론

 - 구조체 변수를 이용하여 구조체 원소에 접근할 때, 도트연산자를 사용하라. 

 - 포인터를 사용하여 구조체 원소에 접근할 때는, 화살표 연산자를 사용하라.  

반응형
Posted by pmj0403