컴퓨터/C_Programing

포인터배열 / 배열포인터 차이

김치부침개21 2016. 1. 17. 23:11
반응형

​출처: http://cds0915.blog.me/100210152374



포인터 배열은 변수들의 주소를 담는 의미하고,  

배열 포인터배열을 가리키는 포인터를 의미합니다.

  

예제소스) 난 정말 C Programming을 공부한 적이 없다구요!  참조

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
 
int main()
{
    int i, j;
 
    /* 포인터 배열의 선언 */
    int a = 1, b = 2, c = 3;
    int *ptrArr[3] = {&a, &b, &c};
 
    /* 배열 포인터의 선언 */
    int arr[2][3] = { 1, 2, 3, 4, 5, 6 };
    int(*arrPtr)[3] = arr;
 
    /* 포인터 배열의 활용 */
    for (i = 0; i < 3; i++)
        printf("%d ", *(ptrArr[i]));
 
    printf("\n\n");
 
    /* 배열 포인터의 활용 */
    for (i = 0; i < 2; i++)
    {
        for (j = 0; j < 3; j++)
            printf("%d ", arrPtr[i][j]);
        printf("\n");
    }
    return 0;
}
 

 

 

* 결과


 


1. 포인터 배열  

- 말 그대로 주소 값을 담을 수 있는 배열을 의미한다.  

 

/* 포인터 배열의 선언 */ 

int a = 1, b = 2, c = 3;
int *ptrArr[3] = {&a, &b, &c};

 

'변수의 주소를 담을 수 있는 공간 3개를 할당해 주세요'와 같은 의미이다.  

 

 

2. 배열 포인터 

- 배열 포인터는 배열을 가리키는 포인터를 의미합니다. 1차원 배열은 이름 자체가 포인터이기 때문에 별도의 포인터가 필요없지만, 2차원 배열을 가리키는 포인터는 이름 자체만으로 포인터의 역할을 하지 않습니다.  

 

1차원 배열  


int arr[10]​  

 

arr 라는 배열 이름 자체가 포인터를 의미

 

*(arr+1) == arr[1] 동일!  

 

 

2차원 배열 

 

 

/* 배열 포인터의 선언 */
int arr[2][3] = { 1, 2, 3, 4, 5, 6 };
int(*arrPtr)[3] = arr;

 

여기서는 arr라는 이름 자체만으로 포인터처럼 배열요소에 접근할 수 없습니다.  

따라서 아래와 같이 배열 포인터를 선언해야 합니다.  

 

int (*arr)[3] = arr; 

 

 

괄호가 있느냐 없느냐에 따라 포인터 배열이냐 배열 포인터냐가 결정되므로  

괄호 사용에 유의해야 합니다.  

 

int (*arr)[3] != int *arr[3] 


반응형