c언어 독학 포인터 변수의 초기화
c언어 독학 포인터 변수의 초기화
■ 어떤 변수든 선언할 때 또는 나중에 값을 넣어서 초기화를 해줘야 하는데요. 다른 변수에 비해서 포인터 변수는 이 초기화에 특히 주의를 해야 합니다. 이 녀석을 이용하면 메모리의 특정 주소에 직접 접근할 수도 있고 그곳에 저장된 값을 변경할 수도 있기 때문인데요. 만약에 포인터 변수를 초기화하지 않고 값을 대입해버리면 어떤 결과가 나올까요? 예제에서 확인해볼게요.
▲ int 변수 x를 선언하고 100으로 초기화 한 후 int형 포인터 변수 aa를 선언하고 초기화를 하지 않은 상태에서 *aa를 이용해서 aa가 가리키고 있는 메모리에 200을 대입하고 있습니다. 그리고 그곳에 *aa에 200이 제대로 대입됐는지 확인하기 위해서 값을 출력하고 있는 모습입니다. 이 프로그램은 컴파일은 됩니다. 하지만 실행하면....
▲ 이렇게 에러가 발생하는데요. 내용을 보면 포인터 변수 aa가 초기화되지 않아서 사용하지 못한다는 내용입니다. 즉, aa가 가리키는 곳이 어딘지를 모르기 때문에 함부로 그곳에 200이라는 값을 대입할 수 없어서 시스템이 멈추는겁니다. 이 aa는 분명히 메모리의 어딘가를 가리키고 있는데 그곳이 어딘지를 모른겁니다. 만약에 aa가 컴퓨터 시스템에서 엄청 중요한 곳을 가리키고 있는데 갑자기 그곳에 200이라는 값을 넣어서 어떤 일이 생길지 모르잖아요.
그렇기 때문에 포인터 변수를 선언하고 나중에 주소를 대입하려거든 선언하면서 NULL 값으로 초기화를 해줘야 합니다. NULL은 "0"을 의미하는데요. 둘 중 편한 방법을 사용하시면 됩니다.
int * aa=NULL;
int * aa=0;
■ 이렇게 포인터 변수를 NULL 값으로 초기화를 하면 이 녀석은 메모리의 어떤 곳도 가리키지 않게 됩니다. 어떤 변수의 주소값을 대입하지 않고 프로그램을 실행하면 앞에서 살펴본 것처럼 역시 에러가 납니다. 하지만 아무 곳도 가리키고 있지 않기 때문에 프로그램만 종료될 뿐 무작위로 값이 대입될 일은 없기 때문에 안전한 것입니다. 포인터 변수를 선언하고 나중에 주소값을 넣을 때는 꼭 주의해야 할 거 같아서 정리해봤습니다. 수고하셨어요.