안녕하세요. 오늘은 배열과 포인터의 관계에 대해 알아보겠습니다.
배열과 포인터는 밀접한 관련이 있습니다. 왜냐하면 배열의 이름 = 주소입니다.
배열의 이름 = 배열의 첫번째 주소
위의 그림을보면 int형 배열을 선언했습니다. array1[0]의 주소는 1이고 int형이므로 주소가 4씩 증가하게 됩니다.
이때 array1 = &array1[0] = &array1이 됩니다.
array1 = 배열의 이름이 배열의 첫번째 주소
&array1[0] = 배열의 첫번째 주소
&array1 = array1배열의 주소
그러나 배열의 크기는 다릅니다. array1의 크기는 20이고 array1은 int형이므로 4입니다.
그러므로 array1+1 = 5 , &array1[0]+1 = 5, &array1+1 = 21이 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h> int main(void) { int array1[5] = { 1, 2, 3, 4, 5 }; printf("array1의 이름 : %d \n", array1); printf("array1[0]의 주소 : %d \n", &array1[0]); printf("array1의 주소 : %d \n", &array1); printf("array1의 크기 : %d \n", sizeof(array1)); printf("----------------------------\n"); printf("array1의 이름 +1 : %d \n", array1 + 1); printf("array1[0]의 주소+1 : %d \n", &array1[0]+1); printf("array1의 주소 +1 : %d \n", &array1 + 1); printf("----------------------------\n"); } | cs |
나중에 문자열을 다룰 때 배열의 이름을 사용해서 참/거짓을 따지면 안됩니다.(배열의 이름은 주소값이기 때문)
배열과 포인터의 관계
배열의 이름이 포인터이므로 배열과 포인터의 관계를 쉽게 알 수 있습니다.
int형 포인터를 선언해서 array1배열을 가리키는 모습입니다.
array1_p은 포인터이므로 array1의 주소를 담고 있고, 자기의 주소는 100입니다.
이때 array1_p의 이름 = 배열의 첫번째 주소 라고 착각하면 안됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> int main(void) { int array1[5] = { 1, 2, 3, 4, 5 }; int *array1_p = array1; printf("array1의 주소 : %d \n", array1); printf("array1_p의 이름 : %d \n", array1_p); printf("array1_p의 주소 : %d \n", &array1_p); printf("array1의 크기 : %d \n", sizeof(array1_p)); printf("----------------------------\n"); printf("array1_p의 이름 +1 : %d \n", array1_p + 1); printf("array1_p의 주소 +1 : %d \n", &array1_p + 1); } | cs |
또한 포인터를 배열처럼 사용 할 수도 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h> int main(void) { int array1[5] = { 1, 2, 3, 4, 5 }; int *array1_p = array1; printf("array1_p[0] : %d \n", array1_p[0]); printf("array1_p[1] : %d \n", array1_p[1]); printf("array1_p[2] : %d \n", array1_p[2]); printf("array1_p[3] : %d \n", array1_p[3]); printf("array1_p[4] : %d \n", array1_p[4]); } | cs |
arr[i] == *(arr+i)
C언어 책을보면 이런 공식이 있습니다.
arr[0]의 값은 1입니다.
arr의 주소는 1입니다. arr이 가리키키는 값(*arr)은 1 입니다.
arr[1]의 값은 2 입니다.
arr+1의 주소는 5 입니다. arr+1이 가리키는 값*(arr+1)은 2 입니다.
'프로그래밍 언어 > C언어' 카테고리의 다른 글
포인터 사용 예시 (0) | 2018.11.21 |
---|---|
C언어 문자열 사용해보기 (0) | 2017.11.05 |
C언어 포인터 알아보기 입니다. (0) | 2017.10.26 |
C언어 공용체(union)에 대해 알아보기입니다. (0) | 2017.09.13 |
C언어 열거형(enum)알아보기 입니다. (3) | 2017.09.12 |