// 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* 타입으로 선언해두는 것이 좋다.