C 언어 더블포인터와 이차원배열의 활용

행과 열의 입력받아서 이차원 배열을 동적으로 할당한후 사용자 인풋을 받는다.
그리고 나서 이차원 배열안에서 최대값과 최소값을 출력해주는 코드


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void inputForRowCol(int* row, int* col);
int** alloc_dyn_intArray(int row, int col);
void setValueArray(int** ppResult, int row, int col);
void printArray(int** ppResult, int row ,int col);
void freeArray(int** ppResult, int row);
void getMaxValue(int** ppResult, int row, int col, int* maxVal);
void getMinValue(int** ppResult, int row , int col, int* minVal);

int main()
{
        int row = 0, col = 0;
        int maxVal = 0, minVal = 0;
        int** ppResult = NULL;

        inputForRowCol(&row, &col);
        ppResult = alloc_dyn_intArray(row, col);
        setValueArray(ppResult, row , col);
        printArray(ppResult, row, col);
        getMaxValue(ppResult, row, col, &maxVal);
        getMinValue(ppResult, row ,col, &minVal);
        freeArray(ppResult, row);
        printf("최대값 : %d\n",maxVal);
        printf("최소값 : %d\n",minVal);
        return 0;
}

void getMaxValue(int** ppResult, int row, int col, int* maxVal)
{
        int i = 0, j = 0, temp = 0;
        temp = ppResult[0][0];
        for(i = 0; i < row; i++)
        {
                for(j = 0; j < col; j++)
                {
                        if(ppResult[i][j] > temp)
                        {
                                temp = ppResult[i][j];
                        }
                }
        }
        *maxVal = temp;
}

void getMinValue(int** ppResult, int row, int col, int* minVal)
{
        int i = 0, j = 0, temp = 0;
        temp = ppResult[0][0];
        for(i = 0; i < row; i++)
        {
                for(j = 0; j < col; j++)
                {
                        if(ppResult[i][j] < temp)
                        {
                                temp = ppResult[i][j];
                        }
                }
        }
        *minVal = temp;
}

void freeArray(int** ppResult, int row )
{
        int i = 0, j = 0;
        if(NULL != ppResult && row > 0 )
        {
                for(i = 0; i< row ; i++)
                {
                        if( NULL != ppResult[i])
                        {
                                free(ppResult[i]);
                        }
                }
                free(ppResult);
        }
}


void printArray(int** ppResult, int row , int col)
{
        int i=0, j=0;
        for(i = 0 ; i < row ; i++)
        {
                for(j = 0; j< col; j++)
                {
                        printf("%d ",ppResult[i][j]);
                }
                printf("\n");
        }

}


void setValueArray(int** ppResult, int row, int col)
{
        int i = 0, j = 0 ;
        for(i = 0 ; i < row; i++)
        {
                for(j = 0; j < col; j++)
                {
                        printf("[%d][%d] 값은?", i, j);
                        scanf("%d", &ppResult[i][j]);
                }
        }

}

int** alloc_dyn_intArray(int row, int col)
{
        int** ppResult = NULL;
        int i  = 0;
        if(row > 0 && col > 0 )
        {
                ppResult = (int**)malloc(sizeof(int*) * row );
                if(NULL != ppResult)
                {
                        for(i = 0; i< row ; i++)
                        {
                                ppResult[i] = (int*)malloc(sizeof(int) * col);
                                if(NULL != ppResult[i])
                                {
                                        memset(ppResult[i], 0 , sizeof(int) * col);
                                }
                                else
                                {
                                        int j = 0;
                                        for(j = 0 ; j < i; j++)
                                        {
                                                if( NULL != ppResult[i])
                                                {
                                                        free(ppResult[i]);
                                                        ppResult[j] = NULL;
                                                }
                                        }
                                        ppResult = NULL;
                                        break;
                                }
                        }
                }

        }
        else
        {
                printf("오류 : alloc_dyn_array() 매개변수\n");
        }
        return ppResult;
}


void inputForRowCol(int* row, int* col)
{
        printf("행(row)의 크기는 ? ");
        scanf("%d", row);
        printf("열(col)의 크기는 ? ");
        scanf("%d", col);
}



실행 시 :
ndgndg91@LAPTOP-CCFK7MKV:~$ ./practice6
행(row)의 크기는 ? 3
열(col)의 크기는 ? 5
[0][0] 값은?1
[0][1] 값은?2
[0][2] 값은?3
[0][3] 값은?4
[0][4] 값은?5
[1][0] 값은?1
[1][1] 값은?2
[1][2] 값은?3
[1][3] 값은?4
[1][4] 값은?5
[2][0] 값은?1
[2][1] 값은?2
[2][2] 값은?3
[2][3] 값은?4
[2][4] 값은?5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
최대값 : 5
최소값 : 1

댓글

이 블로그의 인기 게시물

About JVM Warm up

About idempotent

About Kafka Basic

About ZGC

sneak peek jitpack

Spring Boot Actuator readiness, liveness probes on k8s

About Websocket minimize data size and data transfer cost on cloud

About G1 GC

대학생 코딩 과제 대행 java, python, oracle 네 번째