Ch12. 포인터(22/01/19)

이수복·2022년 1월 18일

포인터 변수

정의 : 데이터가 저장되는 메모리의 주소 값을 저장하기 위한 변수
주소 값 : 메모리 영역의 1byte마다 주소 값이 존재
->32(64)bit 시스템에서는 주소값을 32(64)bit으로 표현
->따라서 주소값의 크기와 포인터 변수의 크기는 같음
(32bit = 4byte, 64bit = 8byte)

int main(void)
{
	int num = 7
    	int * pnum; -> 포인터 변수 pnum의 선언
    	pnum = # -> 포인터 변수 pnum에 변수 num의 주소 값 저장
}
  • int형 변수의 주소값은 int형 포인터 변수에 저장
  • double형 변수의 주소값은 double형 포인터 변수에 저장
  • 포인터 변수도 변수이기 때문에 메모리 공간이 할당되고 이에 따른 주소값이 존재

포인터 연산자(&, *)

  • & : 변수의 주소값 반환
  • * : 포인터가 가리키는 메모리를 참조

포인터 변수 기초 코드

int num = 10;		-> 변수 num에 10저장
int * pnum = # 	-> 변수 num의 주소값을 반환하여 포인터 변수 pnum에 저장
*pnum = 20;		-> 포인터 변수 pnum이 가리키는 변수를 참조하여 20을 저장

포인터 변수 심화 코드

	int num1 = 10;
	int num2 = 20;
	int* ptr1 = &num1;
	int* ptr2 = &num2;
	*ptr1 += 10; // * 연산자를 활용해 포인터 변수 ptr이 가리키는 변수를 참조
	*ptr2 -= 10;
	ptr1 = &num2; // * 연산자를 활용할 필요 없음. 포인터 변수가 가리키는 변수를 바꿀 것이기 때문
	ptr2 = &num1;
	printf("포인터 변수 ptr1 %d ", *ptr1); // * 연산자는 필요. 포인터 변수가 가리키는 값을 참조
	return 0;

포인터 변수 특이사항

  • 포인터 변수를 선언하고 주소 값을 이후에 채울 것이라면 아래와 같이 코드를 구성
  • 공백 값을 삽입하지 않고 선언하면 쓰레기 값으로 초기화
int main(void)			
{
	int * ptr1 = 0;
    	int * ptr2 = NULL;
}
profile
개발 입문자

0개의 댓글