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 |
댓글