[20181214] 2차원 배열
arrTest.c
1. Int iary[10];
//한 개의 요소 à int
2. Int iarr[3][4];
//한 개의 요소: int[4]이고 이것이 3개 있다.
//int[4]가 한 덩어리다. // int iarr[ ][4]={{},{}};à알아서 2개로 인식함.
l 한 요소의 개수는 절대로 생략할 수 없다.
l 하나의 크기만 정확히 알면 된다. (행은 알아서 채워짐)
l 한 단위가 여러 개의 묶음으로 이루어진 것이다.
l Int iarr[3][4]
Iarr은 48byte
Int[4] à 16 byte
iarr[0] - 주소상수
|
iarr[1]
|
iarr[2]
|
||||||||||||
|
|
|
l 2차원에서 차원 하나 낮추면 그건 그냥 주소다.
arr -> 100 |
2차원주소임 |
arr[0] -> 100 |
1차원주소임 |
arr[1] -> 116 |
|
arr[2] -> 132 |
l 값이 같다고 같은 거 아님. 왜냐면 대표하는 메모리가 다름
l 포인터 변수 x가 가리키는 것은 한 개(한 덩어리)만 가리킨다.
l 1차원 전체를 관리할 필요가 없다.
Ex) arr[0][0]을 가리키지 arr[0] 전체를 가리키는 게 아님.
l 이 덩어리가
몇 개인지는 개발자들에게 책임이 있다.
arrTest2.c
<문제>3행4열
전제) main은 건들지 마시오. 함수만 완성해라. ( [*][3]에는 합계가 들어간다.)
값이 들어감 |
|
|
Total |
|
|
|
Total |
|
|
|
Total |
#include <stdio.h>
void input(int ary[][4],int rowcnt){ int colcnt = sizeof(ary[0]) / sizeof(ary[0][0]);
for(int i=0; i<rowcnt; i++){ int sum = 0;
for(int j=0; j<colcnt-1; j++){ scanf("%d",&ary[i][j]); sum += ary[i][j]; } ary[i][3] = sum; } } void output(int ary[][4], int rowcnt){ int colcnt = sizeof(ary[0]) / sizeof(ary[0][0]);
printf("rowcont: %d\ncolcnt: %d\n",rowcnt,colcnt); for(int i = 0; i<rowcnt; i++){ for(int j =0; j<colcnt; j++){ printf("%4d",ary[i][j]); //하나찍을때 칸을 4칸 확보하고 결과 출력한다. } printf("\n"); }
} int main(){ int ary[3][4]; //rowcnt 계산 후 int rowcnt = sizeof(ary) / sizeof(ary[0]);
input(ary,rowcnt); //입력만 받고 output(ary,rowcnt); //출력 } |