728x90
반응형
안녕하세요. 스마트 팩토리입니다.
c 언어[028] 배열(array)과 포인터( pointer)- 포인터 배열에 대해 알아보겠습니다.
1. 포인터 배열
가. 포인터 배열
- 포인터들이 배열형태로 주소값을 가지는 것
배열 arr의 원소를 각각 출력해 보고 그 값들을 포인터 배열로 만들어 보았습니다.
ptr[i]=&arr[i];
ptr[i] 번째는 &arr[i] 로 동일한 인덱스에 있는 값을 가리키도록 하였습니다.
for (int i = 0; i < sizeof(ptr) / sizeof(int); i++) {
printf("*ptr[%d} 는%d\n",i,*ptr[i]);
그럼 다음에 * ptr[5]값을 출력해 보았습니다.
arr[5]값을 그대로 포인터 배열로 *ptr[5]로 만들어진것을 알 수 있습니다.
어디까지나 포인터는 주소값을 가지고 있는 것이기 때문에 배열 값을 변경하면 포인터가 가리키는 값도 변경됩니다.
#include<stdio.h>
int main() {
int arr[5] = { 10,20,30,40,50 };
int* ptr[5];
for (int i = 0; i < sizeof(arr) / sizeof(int); i++) {
ptr[i]=&arr[i];
}
for (int i = 0; i < sizeof(arr) / sizeof(int); i++) {
printf("arr[%d} 는 %d\n",i,arr[i]);
}
printf("\n");
for (int i = 0; i < sizeof(ptr) / sizeof(int); i++) {
printf("*ptr[%d} 는%d\n",i,*ptr[i]);
}
}
포인터 배열 *ptr 의 주소값을 arr로 지정한 다음
arr[1] =200;
*ptr[4] =500;
배열에서 값을 변경하고 포인터에서 값을 변경해 보았습니다.
변경된 값으로 나오는 것을 볼 수 있습니다.
#include<stdio.h>
int main() {
int arr[5] = { 10,20,30,40,50 };
int* ptr[5];
for (int i = 0; i < sizeof(arr) / sizeof(int); i++) {
ptr[i]=&arr[i];
}
for (int i = 0; i < sizeof(arr) / sizeof(int); i++) {
printf("arr[%d} 는 %d\n",i,arr[i]);
}
printf("\n");
for (int i = 0; i < sizeof(ptr) / sizeof(int); i++) {
printf("*ptr[%d} 는%d\n",i,*ptr[i]);
}
printf("\n");
arr[1] =200;
*ptr[4] =500;
for (int i = 0; i < sizeof(ptr) / sizeof(int); i++) {
printf("*ptr[%d} 는%d\n", i, *ptr[i]);
}
}
728x90
반응형
'C 언어' 카테고리의 다른 글
c 언어[030] 2차원 배열 크기 sizeof 에 대한 이해 &arr[0], &arr[0[0],&arr 주소값의 이해 (0) | 2021.10.11 |
---|---|
c 언어[029] 2차원 배열 형식과 구조 및 출력 (0) | 2021.10.09 |
c 언어[027] 배열(array)과 포인터( pointer) (0) | 2021.10.06 |
c 언어[026] 문자열과 배열(3) strcpy:문자열 복사, strcat(문자열 추가), 문자열 초기화 (0) | 2021.10.05 |
c 언어[025] 문자열과 배열(2) strlen 문자열크기, 배열크기 (0) | 2021.10.04 |
댓글