프로그래밍/C

C언어 포인터 배열과 배열 포인터

swedu 2023. 1. 19. 00:55
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