C \ C++/C 개념 정리

[C언어 개념] 포인터 2

안정민 2022. 6. 29. 20:55

- 포인터 배열

: 배열이 선언되면 컴파일러는 메모리에 기저주소와 모든 배열의 요소들이 포함될 수 있는 만큼의 연속적인 공간을 할당한다.   *** 기저주소는 첫 번째 요소(인덱스 0)의 위치

ex) int x[5] = {1,2,3,4,5};

:위와 같은 배열의 기저주소가 1000이라고 하고, int 형의 크기가 2바이트라고 하면 , 1은 1000에, 2는 1002에, 3은 1004에, 4는 1006에, 5는 1008에 저장된다. 

: 이름 x는 첫 번째 요소를 가리키는 상수 포인터로 정의가 된다. 따라서 x의 값은 첫 번째 원소 x[0]이 저장된 1000이 된다.

: 즉 x = &x[0] = 1000

: 만약 int형 포인터인 p를 정의하면, p가 배열x를 가리키게 할 수 있다.

 ex) p = x

       p = &x[0]

: p++을 이용하여 배열 x의 모든 원소에 하나씩 접근이 가능하다.

  p = &x[0]        (=1000)

  p+1 = &x[1]    (=1002)

  p+2 = &x[2]    (=1004)

  p+3 = &x[3]    (=1006)

  p+4 = &x[4]    (=1008)

 

<예제>

포인터 변수를 사용하여 배열의 모든 원소를 더하는 프로그램을 작성하라.

-

 

 

-2차원 배열에서의 포인터 변수

: 1차원 배열에서 *(x+i)와 *(p+i) 모두 x[i]이다. 이와 마찬가지로 2차원 배열의 원소는

:*(*(a+i)+j) 또는 *(*(p+i)+j)로 표현이 가능하다.