이중포인터, 배열 포인터

2022. 12. 26. 16:41C언어/기본 개념

728x90

이중포인터

포인터도 메모리에 저장 공간을 갖는 하나의 변수이다. 주소를 가지고 있는 포인터의 주소도 구할 수 있다. 이 주소를 가지고 있는 포인터가 이중포인터이다. (포인터의 주소는 이중 포인터에 저장)

int a = 10;
int* pi;
int** ppi;

pi = &a;
ppi = π
변수       변숫값          &연산               *연산                **연산
a                 10               100                   
pi              100               200                   10
ppi            200               300                 100                       10

배열포인터

int ary[5]

 ary 값 : 4159700136                ary 주소 :  4159700136
ary +1 : 4159700140                  &ary +1 : 4159700156

ary 값은 +1을 했을 때 4증가하고 주소 값의 +1을 했을 경우 20바이트가 증가한다.

배열전체의 시작 주소값을 배열 포인터라고 한다.

 

int a[5];
int (*p)[5] = &a;
(*pa)[0] = 10; // a[0]하고 같은 의미
p+1 // a주소가 100일 경우 120

위 코드는 포인터 변수 p는 자료형이 int 5형이라는 뜻이다. 그 변수에는 a의 주소 값을 대입하고 그 주소는 a의 전체 값을 의미한다.(a[0]이 아님)


2차원 배열과 배열 포인터

배열 포인터를 매개변수에 쓰면 함수에서 2차원 배열처럼 사용이 가능하다.

int a[3][4];

*(a + 1); // a[1]과 동일
(*(a + 1)) + 2 = 10; //a[1][2] = 10과 동일

포인터를 선언 할 때는 기본적으로 변수 앞에 *을 사용한 후 집어 넣을 값의 자료형을 작성해주면된다.

ex. int a;

pa > *pa > int *pa

ppa > *ppa > int **ppa

728x90

'C언어 > 기본 개념' 카테고리의 다른 글

동적 할당 함수  (0) 2023.02.08
함수 포인터와 void 포인터  (0) 2023.02.07
[C] 다차원 배열  (0) 2022.12.02
[C] 변수 영역  (0) 2022.12.01
[C] 문자열  (0) 2022.11.28