안녕하세요. 스마트팩토리입니다.
c 언어[030] 2차원 배열 크기 sizeof 에 대한 이해 &arr[0], &arr[0[0],&arr 주소값의 이해에 대해 알아보겠습니다
1. 2차원 배열의 크기와 주소값
가. 2차원 숫자 배열 출력
- 메모리에 저장된 2차원 배열을 출력
- for 반복문을 활용
- 형식지정자 및 줄바꿈, 칸 뛰기 활용
int arr[2][3] = { {10,20,30},{40,50,60}};
이차원 배열 arr 2행 3열로 인덱스 번호는 0부터 시작함을 알고 출력값을 이해할 수 있습니다.
printf("arr[1][2]: %d\n", arr[1][2]); 값은 60으로 인덱스 번호의 1행 2열의 요소를 출력합니다.
#include<stdio.h>
void main() {
int arr[2][3] = { {10,20,30},{40,50,60}};
for (int i = 0; i <2; i++) {
for (int j = 0; j <3; j++) {
printf(" %d", arr[i][j]);
}
}
printf("\n");
for (int i = 0; i <2; i++) {
for (int j = 0; j <3; j++) {
printf("\t %d", arr[i][j]);
}
printf("\n");
}
printf("arr[1][2]: %d\n", arr[1][2]);
}
나. 2차원 배열 크기 (sizeof)
int arr[2][3] = { {10,20,30},{40,50,60}};
이차원 배열의 요소는 행과 열로 구분하면 총 요소는 6개입니다. 인덱스 하다 크기는 int 형 으로 4바이트 입니다.
arr[2][3] 으로 구성된 배열 arr 는 총 24 바이트입니다.
arr[0] 으로 하여 그 크기를 출력해 보면 이는 한 행의 요소 전체의 크기를 의미합니다. 즉 2행 3열로 되어 있기 때문에 한 행은 3개의 요소로 구성되어 있어서 12 바이트 입니다.
arr[0][0]은 0행 0열 요소 하나의 크기를 의미합니다. 그래서 4바이트가 나옵니다.
이차원 배열에서는 행전체를 의미하는 것인지 개별 행을 의미하는지 확실히 이해해야 합니다.
#include<stdio.h>
void main() {
int arr[2][3] = { {10,20,30},{40,50,60}};
for (int i = 0; i <2; i++) {
for (int j = 0; j <3; j++) {
printf("\t %d", arr[i][j]);
}
printf("\n");
}
printf("이차원 배열 arr의 크기 : %d \n",sizeof(arr));
printf("이차원 배열 arr[0]의 크기 : %d \n",sizeof(arr[0]));
printf("이차원 배열 arr[0][0]의 크기 : %d \n",sizeof(arr[0][0]));
}
다. 2차원 배열 주소값
printf("이차원 배열 arr 주소 : %d \n", &arr);
- arr 주소 값 즉 arr[0][0]의 주소값 인 &arr[0][0] 값과 같습니다.
이는 1차원 배열일때 첫번째 인덱스 0행 0열 요소의 주소값과 해당 배열의 주소값이 같은 것과 같은 이치입니다.
printf("이차원 배열 arr[0] 주소 : %d \n", &arr);
arr[0]은 첫번째 행의 주소값 을 의미합니다. 결과적으로 이 값도 배열의 주소값과 동일합니다.
printf("이차원 배열 arr[0][0] 주소 : %d \n", &arr[0][0]);
배열의 주소값과 동일한 값이란 것을 알 수 있습니다.
#include<stdio.h>
void main() {
int arr[2][3] = { {10,20,30},{40,50,60} };
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("\t %d", arr[i][j]);
}
printf("\n");
}
printf("이차원 배열 arr 주소 : %d \n", &arr);
printf("이차원 배열 arr[0] 주소 : %d \n", &arr);
printf("이차원 배열 arr[0][0] 주소 : %d \n", &arr[0][0]);
printf("\n");
printf("이차원 배열 arr 주소 : %x \n", &arr);
printf("이차원 배열 arr[0] 주소 : %x \n", &arr);
printf("이차원 배열 arr[0][0] 주소 : %x\n", &arr[0][0]);
}
printf("이차원 배열 arr[0][0] 주소 : %d \n", &arr[0][0]);
printf("이차원 배열 arr[1][0] 주소 : %d \n", &arr[1][0]);
두 배열의 주소값의 차이를 보면 행의 요소의 갯수만큼 차이가 나는 것을 알 수 있습니다
인덱스=주소값으로 확인해 보면
arr[0][0]=9436624
arr[0][1]=9436628
arr[0][2]=9436632
arr[1][0[=9436636
4바이트 크기로 순차 진행되는 것을 알 수 있습니다.
'C 언어' 카테고리의 다른 글
c 언어[029] 2차원 배열 형식과 구조 및 출력 (0) | 2021.10.09 |
---|---|
c 언어[028] 배열(array)과 포인터( pointer)- 포인터 배열 (0) | 2021.10.07 |
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 |
댓글