정보처리기사 준비/프로그래밍 파트 정리

[프로그래밍] C언어-포인터, 배열

류도토리 2024. 4. 12. 10:44

1. 포인터

  • C언어에서 변수의 주소를 저장, 사용할 때 사용하는 변수
  • 포인터 변수를 선언 할 때는 자료의 형을 먼저 쓰고 변수명 앞에 간접 연산자 *을 붙인다
    (int *a;)
  • 포인터 변수에 주소를 저장하기 위해 변수의 주소를 알아낼 때는 변수의 앞에 번지 연산자 &를 붙인다.
    (a = &b;) - b의 주소값을 a에 넣는다.
  • 실행문에서 포인터 변수에 간접 연산자 *을 붙이면 해당 포인터 변수가 가리키는 곳의 값
    (c = *a;) a의 주소에 담긴 변수 또는 배열의 값을 c에 넣는다.
  • 포인터 변수는 필요에 의해 동적으로 할당되는 메모리 영역인 힙 영역에 접근하는 동적 변수
  • 복사본을 만들지 않고 그 값을 가리키는 주소만 알려줌으로써 효율적인 메모리 사용이나 단축된 처리시간 장점

2. 포인터 변수의 용도

  • 연결된 자료 구조를 구성하기 위해 사용
  • 동적으로 할당된 자료 구조를 지정하기 위해
  • 배열을 인수로 전달하기 위해
  • 문자열을 표현하기 위해
  • 커다란 배열에서 요소를 효율적으로 저장하기 위해
  • 메모리에 직접 접근하기 위해

 

&a = 주소, *b = 값

 

 

3. 포인터와 배열

  • 배열을 포인터 변수에 저장한 후 포인터를 이용해 배열의 요소에 접근
  • 배열 위치를 나타내는 첨자를 생략하고 배열의 대표명만 지정하면 배열의 첫 번째 요소의 주소를 지정하는 것과 같음
    ex) b = a 는 a[0]만 저장됨
  • 배열 요소에 대한 주소를 지정할 때는 일반 변수와 동일하게 & 연산자를 사용
    ex) b = &a[0]
  • *(a+0) = a[0]
  •  

4. 2차 배열

  • int arr[2][3] = {1,2,3,4,5,6}일 때
1 2 3
4 5 6
  • *(p[0]+1) + *(p[1]+2) = [0][1] + [1][2] = 2 + 6 = 8
  • *(*(p+1)+0) + *(*(p+1)+1) = [1][0] + [1][1] = 4 + 5 = 9

기출문제

#include 

int main() {
   char *p = "KOREA";
   printf("%s\n", p);
   printf("%s\n", p + 3);
   printf("%c\n", *p);
   printf("%c\n", *(p + 3));
   printf("%c\n", *p + 2);
   return 0;
}

정답

KOREA

EA

K

E

M (아스키코드로 K의 두개 뒤 글자)