출처: 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]
[출처] 포인터 배열 & 배열 포인터 |작성자 DSLab
'컴퓨터 > C_Programing' 카테고리의 다른 글
c언어 한글코드 확인 방법( & 0x80) (1) | 2016.01.17 |
---|---|
함수 포인터 / typedef 선언 함수 포인터 (0) | 2016.01.17 |
visual studio(VS) 6.0 에서 스택 크기/사이즈 변경 (0) | 2016.01.17 |
이중 포인터 동적 할당(malloc) / c언어 (0) | 2016.01.17 |
비트연산자(&, |, ~, <<, >>) (0) | 2016.01.17 |