728x90
반응형
2023.1.18. 최초 작성
C언어에서 포인터 변수는 메모리의 주소를 기억하는 변수이다.
배열은 여러 개의 메모리 공간을 연속적으로 사용하는 자료구조로 같은 자료형만을 가질 수 있고 이름이 하나여서 번지로 접근한다.
아래 코드는 포인터를 일반 자료형들처럼 배열로 사용하는 예제이다.
#include <stdio.h>
void main() {
int* arr1[5];
int a = 10;
int b = 20;
int c = 30;
int d[3] = { 1, 2, 3 };
arr1[0] = &a;
arr1[1] = &b;
arr1[2] = &c;
arr1[3] = &d;
arr1[4] = &d[1];
printf("arr[0] : %d\n", *arr1[0]);
printf("arr[1] : %d\n", *arr1[1]);
printf("arr[2] : %d\n", *arr1[2]);
printf("arr[3] : %d\n", *arr1[3]);
printf("arr[3] : %d\n", *(arr1[3]+1));
printf("arr[3] : %d\n", *(arr1[3]+2));
printf("arr[4] : %d\n", *arr1[4]);
}
[실행 결과]
arr[0] : 10
arr[1] : 20
arr[2] : 30
arr[3] : 1
arr[3] : 2
arr[3] : 3
arr[4] : 2
포인터 배열의 경우 연속적인 메모리 공간을 가지는 포인터들의 모음이라면 배열 포인터는 한 개다. 배열의 주소를 가질 수 있는 포인터라고 할 수 있다.
아래 코드는 배열 포인터의 예제인데 배열 포인터에 배열의 주소를 저장하여 사용한다.
#include <stdio.h>
void main() {
int (*arrp)[5];
int arr1[5] = {1, 2, 3, 4, 5};
arrp = &arr1;
for (int i = 0; i < sizeof(arr1) / sizeof(int); i++) {
printf("arr1[%d] 주소 : %p, 값 : %d\n", i, &arr1[i], arr1[i]);
printf("arrp+%d 값 : %p, (*arrp)[%d] 값 : %d\n", i, *arrp+i, i, (*arrp)[i]);
}
}
728x90
반응형
728x90
반응형
'프로그래밍 > C' 카테고리의 다른 글
C언어 구조체 포인터 (0) | 2023.01.19 |
---|---|
C언어 함수 포인터 (0) | 2023.01.19 |
C언어 구조체 (0) | 2023.01.17 |
C언어 문자열 다루기 (0) | 2023.01.17 |
CONST를 이용한 상수화 (1) | 2023.01.16 |