본문 바로가기
프로그래밍/C언어

[프로그래밍] C언어 포인터(Pointer) 선언 개념과 예제

by virusuk 2023. 3. 10.
반응형

포인터의 이해

  • 메모리의 주소 값을 가리키는 변수를 뜻합니다.

포인터의 선언

  • 포인터 명 앞에 *를 붙입니다.
  • 데이터형은 그 포인터 변수가 가리키고자 하는 지점의 데이터형에 맞게 선언합니다.
    • 예시)
데이터형 * 포인터명;
char *chptr;	// char 형을 가리키는 포인터 chptr 선언
int *iptr;		// int 형을 가리키는 포인터 iptr 선언
float *fptr;	// float 형을 가리키는 포인터 fptr

 

포인터 연산자

  • 주소(&) 연산자: & 바로 다음에 변수가 오면 그 변수가 저장된 주소를 나타냅니다.
    1. &는 수식, 상수, 레지스터 변수에는 사용할 수 없습니다.
    2. 단순변수, 배열요소, 포인터 변수, 구조체 변수는 가능합니다.
  • 값 연산자: 실행문일 경우 *  바로 다음에 포인터가 오면 그 포인터가 가리키는 주소에 저장된 값을 나타냅니다.

포인터와 데이터 간 메모리 주소 예시 그림

 

int data;
int *ptr;	// ptr이 정수형 pointer 변수임을 의미
data = 3;
ptr = &data;	// data의 주소

/**예시1	**/
ptr = &x;	// 단순변수 x가 차지하는 실제 값의 주소를 ptr에 대입
y = *ptr;	// 변수 y에 포인터 변수 ptr이 가리키는 곳의 값, 즉, 단순 변수 x의 값을 대입


/**예시2	**/
int num1, num2;
int *ptr;	// 포인터 변수의 선언
num2 = 10;
ptr = &num2;	// 단순변수 num2가 차지하는 실제 값의 주소를 ptr에 저장
num1 = *ptr;	// 변수 num1에 포인터 변수 ptr이 가리키는 곳의 값을 대입

 

변수 선언과 포인터 변수 선언 시, 데이터 참조 (표)

선언 데이터 참조 주소 참조
int a; a &a
int *ptr; *ptr ptr

 

포인터 선언 예시)

int ja[10]     ---> int 유형의 원소 10개로 이루어진 배열.
 
int *ja[10]    ---> int 유형을 가리키는 포인터 10개로 이루어진 포인트 배열
   
int (*ip)[10]  ---> int 유형의 원소 10개로 이루어진 1차원 배열을 가리키는 포인터
                           변수 ip
int f1()       ---> int 유형의 값을 return 하는 함수.
   
int *f2()      ---> int 유형을 가리키는 포인터를 return 하는 함수 f2.

 

 

포인터의 개념과 원리를 이해하는 것이 중요하며, 무엇보다도 예시를 따라서 실습을 한번 해보고 메모리 구조와 함께 그려나가시면 많은 도움이 될 것 같습니다.!

반응형