본문 바로가기
정상을향해/Languages

[C] 포인터 : *의 의미

by 사이테일 2011. 4. 16.
    int temp = 0;
    int *temp_p;

    temp_p = &temp;
    *temp_p = temp;

     printf("temp_p = %d, *temp_p = %d", temp_p, *temp_p);


포인터 변수를 정의할 때의 '*'와

수식에서 사용할 때의 '*'는 다른 의미가 있다.


정의할 때 사용하는 '*'는 주소를 저장할 수 있는 변수를 할당 받는 것이고

수식 내에서 사용된 '*'는 변수에 대한 역참조(dereferencing)를 한다는 의미이다.

이는 역참조 연산자(dereferencing operator)라고 따로 부른다.



 #include <stdio.h>

  int main()
  {
    int *temp_p;

    *temp_p = 1024;     // Segmentatiion Fault 발생

    printf("%d\n", *temp_p);
   
    return 0;

  }

*temp_p = 1024

위문장은 문법적으로는 문제가 없지만 실행 시 문제를 발생한다.

temp_p는 주소를 저장할 수 있는 변수이다.

초기화를 하지 않았기 때문에 이 곳에는 쓰레기 값이 들어있다.

그리고 역참조 연산자 의미에 의해 위의 문장은 temp_p가 가리키는 곳에 1024라는 값을 넣는다.

결국 쓰레기 값, 즉 알 수 없는 곳에 1024라는 값을 넣게 되는 것이다.


그런데 그 쓰레기 값이 있는 곳을 시스템이 사용하고 있다면

시스템은 순간적으로 엉망이 될 것이다.

그 것을 막기 위해 컴파일러는 'Segmentation Fault'를 나타내는 것이다.



'정상을향해 > Languages' 카테고리의 다른 글

상속 (Inheritance)  (0) 2013.11.11
얕은복사와 깊은복사  (0) 2013.11.11
멤버 이니셜라이저를 이용한 멤버 초기화  (0) 2013.11.11
C++에서의 파일분할  (7) 2013.11.10
참조자(Reference)와 함수  (0) 2013.11.10
[C] 포인터 : 배열명  (0) 2011.04.16