[[프로그래밍_NOTE]]/C , C++

전역공간

갑빠돌격기 2008. 8. 13. 12:33

// Ex1 ////////////////////////////////////////////////////
#include<stdio.h>

int g_IValue;

void main()
{
 int IValue;

 printf("==== value =================\n");
 printf(" g_IValue = %x\n" , g_IValue);
 printf(" IValue   = %x\n" , IValue);
 
 printf("\n===== address ==============\n");
 printf("&g_IValue = %x\n" , &g_IValue);
 printf("& IValue  = %x\n" , &IValue);
}
//////////////////////////////////////////////////////////

사용자 삽입 이미지

  전역변수는 자동적으로 0으로 초기화..
  일반변수는 CCCC CCCCC으로 초기화.


  일반적인 스택이 아닌 다른 곳에 위치.
  0x12ff7c -> 일반적인 변수위치.




// Ex2 /////////////////////////////////////////////////////////////
#include <stdio.h>

void main()
{
 char *pStr1 = "홍길동";
 char *pStr2 = "홍길동";
 char *pStr3 = "김길동";
 printf("pStr1->%x\n" , pStr1);
 printf("pStr2->%x\n" , pStr2);
 printf("pStr3->%x\n" , pStr3);

 /* error  (컴파일시 문제는 없으나 실행시에 멈추게 된다.)*/
//  pStr1[0] = '1';                   //전역공간의 문자열은 Read-Only
// 이같은 문제를 해결하기 위해 const를 써주는게 컴파일시 오류를 검출하기 좋다.
// const *pStr1 = "홍길동";     <- 이렇게 써주면 컴파일 시점에서 오류를 찾아낼 수 있다.
}
///////////////////////////////////////////////////////////////

사용자 삽입 이미지





 
  analysis ) '코드에서의 문자열'은 전역공간에 위치한다. (Read Only)
                가리켜야 할 문자열이 동일하다면 전역공간에는 하나의 문자열이 위치되며,
                여러포인터가 이를 공유하게 된다. (pStr1과 pStr2가 가리키는 곳의 위치가 같다.)
                문자열이 다를경우 새로운 위치에 자리잡게 된다. (pStr3의 주소값)
  tip ) 상수 문자열은 언제나 const char* 타입으로 선언해두는 것이 좋다.