본문 바로가기
c/자습

Unit 36 - 38 (C언어 코딩 도장)

by 지트리아 2022. 9. 7.

Unit 36. 배열 사용하기

선언 방식 : int numArr[10]

전체 크기 : sizeof(numArr)

배열의 개수 : sizeof(numArr) / sizeof(int)

배열의 첫번째 값은 주솟값을 의미

Unit 37. 2차원 배열 사용하기

자료형 배열이름[세로크기][가로크기];

int col = sizeof(numArr[0]) / sizeof(int)

int row = sizeof(numArr) / sizeof(numArr[0])

Unit 38. 포인터와 배열 응용하기

포인터를 배열처럼 사용 :

int *numPtr = malloc(sizeof(int) * 10)

numPrt[9] = 20;

 

malloc 쓰는이유 : 개인적 생각

scanf("%d", &a)

numPtr[a]; #실행이 안됨

*numPtr = malloc(sizeof(int) * a) #이렇게 써야 함

 

2차원 배열 만드는 방법 : 

int **m = malloc(sizeof(int * ) * 세로크기)

for( int i = 0 ; i < 세로크기; i++)

{m[i] = malloc(sizeof(int)*가로크기)}

메모리 해제는 역순으로

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

int main()
{
    int a, b;
    
    scanf("%d %d", &a, &b); 

    char ** matrix = malloc(sizeof(char*) * a);
    for (int i = 0; i < a; i++)
    {
        matrix[i] = malloc(sizeof(char) * (b+1));
    }

    for (int i = 0; i < a; i++)
    {
       scanf("%s", matrix[i]);             
    }

    for (int i = 0; i < a; i++)
    {
        for (int j = 0; j < b; j++)
        {
            if (matrix[i][j] == '*')
            {
                printf("%c", matrix[i][j]);
            }
            else
            {
                matrix[i][j] = 0;
                for (int x = i - 1; x <= i + 1; x++)
                {
                    for (int y = j - 1; y <= j + 1; y++)
                    {
                        if (x<0 || y<0 || x>=a || y>=b)
                        {
                            continue;
                        }
                        else if (matrix[x][y] == '*')
                        {
                            matrix[i][j]+=1;
                        }
                    }
                }
                printf("%d", matrix[i][j]);
            }                    
        }
        printf("\n");
    }


    for (int i = 0; i < a; i++)
        free(matrix[i]);
    
    free(matrix);

    return 0;
}

char **를 안해서 애를 많이 먹었다. 이전에 이걸 안가르쳐줬자나ㅠ

신기했던건 char로 이중포인터를 지정했고 가로도 char로 지정했는데

int가 들어갔다는 것이다. 이거엔 궁금증이 남지만 물어볼 사람이 없다ㅠ

핵심정리

Q&A

sizeof : 

함수가 아닌 연산자, 즉 ()가 필요 없음

 

int **numArr =malloc(sizeof(int *) * 세로크기) :

malloc안을 40으로 표현해도 되지만 읽을 때 해석이 모호해짐

'c > 자습' 카테고리의 다른 글

서식 지정자(scanf, printf)  (0) 2022.09.18
Unit 39 - 40 (C언어 코딩 도장)  (0) 2022.09.08
Unit 34 - 35 (C언어 코딩 도장)  (0) 2022.09.05
Unit 32 - 33 (C언어 코딩 도장)  (0) 2022.09.05
Unit 26 - 31 (C언어 코딩 도장)  (0) 2022.09.04

댓글