[정보처리기사] 유튜브 두목넷 정보처리기사 실기를 위한 C 특강(7강 포인터)

728x90

CH07 포인터

 

1. 포인터(pointer) 변수

  • 주소참조: 메모리 여역에는 주소가 부여되어 있다
  • 포인터 변수: 포인터 값을 다룰 수 있는 변수
  • & (주소연산자)
  • * (포인터연산자, 간접연산자)

 

포인터(pointer)

  • 특정한 데이터가 저장된 주소값(시작주소)을저장하는 변수
  • 하나의 주소값은 1바이트 크기의 메모릭공간을 표현함 
  • 형식: 자료형 * 포인터변수명;
# 포인터변수 선언문;

{
	int *p1;	
    	int* p2;

 

2. 포인터배열변수와 연산자

  • & (주소연산자)
    • 모든 변수에 대한 주소값을 구하는 연산자
  • * (포인터연산자, 간접연산자, 내용연산자)
    • 포인터 변수의 자료(내용)을 구하는 연산자
# 포인터변수 예시

#include <stdio.h>
void main()
{
	int num;
   	int* p1;
    num = 100;
    p1 = &num;		# &: 주소연산자
    printf("일반변수 접근: %d", num);		# 100
    printf("포인터변수 접근: %d", *p1);		# 100
}

풀이

10번지 1000번지
p1 num 
  • num = 100
  • 'p1 = &num': p1의 주소를 num의 주소로 바꿈
  • p1은 1000번지 즉, p1의 값도 100

 

3. 포인터배열변수와 배열

 

# 포인터변수 예시2

#include <stdio.h>
void main()
{
	int	i
   	int	A[] = {10, 20, 30, 40, 50};
    	int*	p;
    	p = A;					# p = &A[0]
    	for(i=0;, i<5;, i++)
    	{
    		printf("%5d", *(p+i));		# printf("%5d", A[i])
    	}
 }

풀이

A[0] A[1] A[2] A[3] A[4]
10 20 30 40 50
100번지 101번지 102번지 103번지 104번지

 

  • p = A;: 포인터 변수 p에 배열 A의 첫 번째 요소를 가리키는 포인터를 할당, 배열 이름 A는 해당 배열의 첫 번째 요소의 주소를 가리키므로, p = &A[0];와 동일한 역할
  • for(i=0;, i<5;, i++): 반복문을 사용하여 배열의 요소를 출력
  • printf("%5d", *(p+i));: 포인터 변수 p와 루프 변수 i를 사용하여 배열 A의 요소를 출력,  *(p+i)는 포인터 p가 가리키는 메모리 주소에 있는 값을 가져오는 것으로, 이는 A[i]와 동일
  • %5d 형식 지정자는 출력될 숫자를 오른쪽으로 정렬하고 최소한 5자리의 공간을 확보하도록 지정

출력 10   20   30   40   50

 

4. 포인터변수와 연산

# 포인터변수 예시3

#include <stdio.h>
void main()
{
	int NUM = 98;
        int* ptr;
        ptr = &NUM;
        NUM = NUM + 1;		#NUM++;
        printf("%d", num);
        *ptr = *ptr + 1;	#(*ptr)++;
        printf("%d", *ptr);
}

풀이

10번지 1000번지
ptr NUM
  • num = 98
  • 'ptr = &num': ptr의 주소를 num의 주소로 바꿈
  • ptr은 1000번지 즉, ptr의 값(*ptr)은 98
  • 'NUM = NUM + 1': NUM의 값은 99
  • NUM은 ptr이 가리키는 값(*ptr)이기 때문에 99
  • '*ptr' = *ptr +1;': ptr의 값은 100
728x90