흰오목눈이야 개발하자

[20181214] 2차원 배열 본문

C

[20181214] 2차원 배열

흰오목눈이 2018. 12. 14. 18:14

C__20181214.pdf




arrTest.c

1.     Int iary[10];

//한 개의 요소 à int

2.     Int iarr[3][4];

//한 개의 요소: int[4]이고 이것이 3개 있다.

//int[4]가 한 덩어리다. // int iarr[ ][4]={{},{}};à알아서 2개로 인식함.

l  한 요소의 개수는 절대로 생략할 수 없다.

l  하나의 크기만 정확히 알면 된다. (행은 알아서 채워짐)

 

#include <stdio.h>

void output(int iptr[][3],int rowcnt) { // 한 덩어리가 int iptr[][3] // 3개짜리가 한 덩어리다.// 행은 몰라도 상관없어!

    int colcnt = sizeof(iptr[0]) / sizeof(iptr[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",iptr[i][j]); //하나찍을때 칸을 4칸 확보하고 결과 출력한다.       
        }
        printf("\n");
    }

}


int main(){
/* int iar[3][4] ={{1,2,3,4},
                    {11,12,13,14},
                    {21}//모자란 부분은 다 0으로 채우져 있다.
    };
    for(int i=0; i<3; i++){
        for(int j=0; j<4; j++){
            printf("%d",iar[i][j]);

            printf("\n");
        }
    }

    //Is it possible? --> YES
    int arr[][3]= {1,2,3,4,5,6,7}; //3행 3열짜리 배열이라 알아서 생각함. 123/456/700
    //인티져 방 3개짜리가 몇 개인지 몰라.


    int ar1[5] = {1,2,3,4,5};
    int len = sizeof(ar1)/sizeof(ar1[0]);   //ar1[0]의미는 한덩어리 // 요소의 갯수 = 전체크기 / 한 요소크기
*/
    // 한 요소는 int[3]
    int iar[][3]= {1,2,3,4,5,6,7,8,9,10}; //요소 갯수 3개 // 이 요소 갯수를 행이라고 부른다.
    int rowcnt = sizeof(iar) / sizeof(iar[0]);
    int colcnt = sizeof(iar[0]) / sizeof(iar[0][0]);
    

    printf("iar => %u\n\n",iar);
    
    printf("iar[0] => %u\n",iar[0]);
    printf("iar[1] => %u\n",iar[1]);
    printf("iar[2] => %u\n",iar[2]);
    printf("iar[3] => %u\n",iar[3]);
    
    // int** :: 2번 따라가야 integer나온다는 의미.
    output(iar,rowcnt); //iar은 2차원 포인터임. 받을 때 한 덩어리 받을 준비를 하고 받아야 함.
    //한 덩어리가 몇 개 있는 지 개발자가 알려줘야 해-->rowcnt

}


 

l  한 단위가 여러 개의 묶음으로 이루어진 것이다.

l  Int iarr[3][4]

Iarr48byte

Int[4] à 16 byte

iarr[0] - 주소상수

Iarr[0][0]

 

 

 

iarr[1]

 

 

 

 

iarr[2]

 

 

 

Iarr[2][3]

 

 

 

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

<문제>34

 전제) 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); //출력

}

 


'C' 카테고리의 다른 글

[20181210]비트활용 && Shift  (0) 2018.12.10
[20181207]정리해야함  (0) 2018.12.10
[20181206]C 프로그램 설치+수의체계_비트  (0) 2018.12.07