본문 바로가기
dev/C

[C] 배열, 2차원 배열, 배열 포인터

by seohan1010 2024. 7. 28.

 

 

 

 

1차원 배열

 

 

 

 

위와 같이 배열 주소를 가리키는 변수와

배열 포인터가 있을 때

 

이렇게 2개의 변수가 생성이 되고

 

 

포인터 변수는 배열의 첫번째 요소의 주소값을 가리키게 된다.

 

arr+1과 arr2+1의 결과는 모두 바로 다음

요소의 주소를 가리키게 된다.

 

 

 

2차원 배열일때

 

 

2차원 배열과 포인터 변수가 있을때

 

 

 

이렇게 2개의 변수가 생성이 되고

 

 

 

포인터 변수는 2차원 배열 0번인덱스의 1차원 배열의

첫번째 요소의 주소를 가리키게된다.

 

 

arr+1은 다음 3개의 int형 요소를 가진 1차원 배열의

첫번째 요소의 주소를 가리키게 되지만,

arr2+1은 arr[0][0]의 주소를 가리키게 된다.

---> pointer변수가 int형 요소를 가지는 1차원 배열 

타입이기 때문이다.

 

 

 

2차원 배열타입 포인터 변수

위와 같이 변수를 선언했을때

포인터 변수에는 int형 요소가 3개인

1차원 배열을 담고 있는 2차원 배열의

주소값을 담을수 있게 된다.

 

 

 

 

이와 같이 변수가 생성이 되게 되고

 

 

 

arr[0][0]의 주소값을 가리키게 된다.

 

이번에는 arr+1과 arr2+1이

같은 주소값을 가리키게 되었다.

 

 

 

다차원 배열을 다양한 방법으로 가리킬수 있는 포인터 변수

 

 

 

 

이번에는 포인터 변수를

*(arr2)[2] 로 선언해 보았다.

 

위와 같은 변수가 생성이 되고

 

arr2는 arr[0][0]의 주소값을 가리키게 된다.

 

arr+1은 다음 3개의 요소를 가진 1차원 배열의

첫번째 요소의 값을 가리키고 있지만,

arr2+1은 arr[0][2]의 주소값을

가리키고 있다.

 

 

(*arr2)[2]의 주소값이 다른이유

 

arr[][3] = {{1,2,3},{4,5,6}};

이런 형식이 될거 같다.

 

(*arr2)[2] = {{1,2},{3,4},{5,6}}

이런 형식이 되기때문에

arr2+1은 arr[2][1]의 주소값을 가리키게 된다.

 

 

 

 

 

'dev > C' 카테고리의 다른 글

[C] pointer 변수 size  (0) 2024.07.16
[C] 문자 배열 선언하기  (0) 2024.07.16
[C] 변수 메모리 할당  (0) 2024.07.03
[C] struct 변수선언과 메모리 할당  (1) 2024.07.03
[C] struct 변수 선언 순서에 따른 크기 변화  (0) 2024.07.03