반응형

printf("Welcome, Let's C Language.");  // 초등학생도 쉽게 이해시켜주는 C언어 글을 포스팅합니다.

 

안녕하세요. 비전공자 출신 SW Test 엔지니어 Crush on Study입니다. 

이번 글에서는 조건에 따라 다른 화면을 출력시킬 수 있도록 해주는 '조건문'에 대해 배워보겠습니다.

 

Q. 먼저 이전 시간에 배운 내용을 잠깐 복습해봅시다.

A. 1) Switch문에 대해 배웠습니다.

- Switch문은 트리거를 생성하여 어떤 값을 입력하냐에 따라 다른 결과를 출력할 수 있도록 생성한 문법입니다.

if문과 비슷한 개념이지만 여러개의 다중조건을 처리하고자할 때는 Switch문이 코드도 좀 더 깔끔한 느낌입니다.

통상적으로는 if문을 많이 쓰긴하나, switch문도 알아둘 필요가 있겠습니다.

2) default와 break문에 대해 배웠습니다.

- default는 if문으로 치면 else와 동일합니다.  if / else if가  case 1 , case 2, ..... 같은거고 그 이외의 조건에 해당하는 값을 입력했을 때는 default 구문이 실행되도록 합니다. 

break문은 switch에 있어서 가장 중요한 문법인데요. 각 case마다 break를 아래에 적어주지않으면 그 다음 case들도 모두 실행이 됩니다. 

 

딱 보고 기억 나는게 없다. 하면 바로 이 전글을 참고하세요.

https://crush-on-study.tistory.com/213

 

[C언어] #6. Switch / case문법

printf("Welcome, Let's C Language."); // 초등학생도 쉽게 이해시켜주는 C언어 글을 포스팅합니다. 안녕하세요. 비전공자 출신 SW Test 엔지니어 Crush on Study입니다. 이번 글에서는 조건에 따라 다른 화면을..

crush-on-study.tistory.com

 

오늘 해볼 것은 배열입니다.

배열이 왜 필요하냐?

우리는 어떤 변수를 선언하기 위해서는 다음과 같은 작업을 거칩니다.

int a=1;
int b=2;
int c=3;
int d=4;
.
.

몇개 안되는 변수면 이정도 수고는 그래요. 할만 합니다. 근데? 변수가 수백개는 된다면?? 아니 수십만개?

그때도 일일이 변수를 선언한다면 손가락 깨질겁니다. 그런 것을 방지하고자 나온게 배열입니다.

1차원 배열

// # 7. 1차원 배열 & 2차원 배열 강의


// 1차원 배열
#include <stdio.h>

int main()
{
    int num[10] = {1,2,3,4,5,6,7,8,9,10};

    for (int i=0; i<10; i++)
    {
        printf("%d , ",num[i]);
    }
    return 0;
}

보시면 10개의 변수를 'num'이라는 함수에 넣었습니다. 그리고 num 옆에 대괄호 표시로 변수의 개수를 적어두었습니다.

이 의미는 num 함수에 현재 10개의 변수가 담겨져 있다! 라는겁니다. 어떤가요? 확실히 일일이 선언하는 것보다 깔끔하고 짧습니다. 이렇게 배열을 선언한 것을 출력하기 위해서는 이제 아래 printf문에 적은 것처럼 num[i] 을 적어줘야 합니다.

 

여기서 주목해볼 것은 for문에 적힌 식들입니다. 보시면 저는 변수 i를 0에서부터 시작하고 9까지만 출력되게 하였습니다. 근데 num[10]에 담은 것은 1부터 10까지인데 뭔가 1씩 차이가 나는게 아닌가? 싶을겁니다.

아래를 봅시다.

1. 배열
배열은 위에서 변수들을 저장해놓는 기능을 한다했는데요. 좀 더 자세히 말하면 변수들의 '아파트' 같은 개념이라 보시면 됩니다. 변수 0,1,2,3,4,5,6,7,8,9들이 num 아파트에 입주를 했다 보시면 됩니다.  즉, 같은 아파트 내에 있어도 상세주소는 다른거죠. num아파트 101호, 102호, 201호,.... 이런식으로 말이죠.

변수와 주소값을 출력

직접 출력을 해봤습니다. 1이라는 친구는 0000002ffa1ff600이라는 주소에서 살고있군요.

그 외에도 다른 친구들도 제각각의 주소를 할당받았습니다. 맨 뒤에 00 04 08 0c 10 ~ 이런식으로 증가하는거보니까

int형으로 받아서 그런지 4byte씩 늘어나는게 보입니다.

제가 변수는 1부터 10으로 설정을 했지만, 배열 인덱스의 시작은 0부터 시작합니다. 따라서, 변수 1이 살고있는 인덱스는 0층, 2는 1층.... 이런식으로 진행됩니다.

문자 배열

문자의 배열도 똑같습니다. char는 1byte니까  주소값도 1씩만 늘어나는게 보입니다. 

근데 char의 경우는 앞에서도 말했지만 문자 딱 하나씩만 받기때문에  배열에다가 ' ' 작은따옴표를 해줘야하는데요.

그럼 일일이 저렇게하지말고 한번에 적는건 안되나요? 라는 의문이 들겁니다. 당연히 가능하지만 문자열을 적고자할 때는 'Null 포인트'에 대해 고려하고 있어야 합니다.

문자열 Null 메모리

바로 저부분 \0입니다. 이는 절대문자 '0'을 의미하는게 아니라 아스키코드 상 문자열의 종료를 의미하고 있습니다.

따라서 문자열을 배열로 입력받고자 할 때는 글자 수 크기에다가 항상 1만큼 더해준 값을 고려해야한다는 점.

이게 중요한 포인트입니다.

 

마지막으로 2차원 배열을 보겠습니다.

2차원 배열도 별거없습니다. 막연하게 행은 가로, 열은 세로~ 이렇게 외워도 되지만요.

num[i][j]에서 j는 배열 하나에 몇 개의 원소가 들어가 있고! 라는 의미구요. i는 그 배열이 몇 개이다! 라는 의미라고 받아들이셔도 도움이 될 듯 합니다.

제가 약간 테트리스마냥 해놔서 이해가 안될 수 있는데 아래에 좀 더 쉽게 표현해보았습니다.  num[3][4]에 저장된 숫자들을 적어놓고 [1][2]에 해당하는 번호를 출력해보았습니다.

7이 나온 이유를 봅시다.

위에서 말한것에 따르면 하나의 배열에 4개의 원소가 담겨있다라는 뜻이고, 그 배열이 총 3개있다! 입니다.

따라서 num[1][2]를 해석하고자할 때는 뒤에 [2]부터 보면 됩니다. 배열의 인덱스는 0부터 시작하니까, 2는 세번째 원소에 해당합니다.

그러면 5,7,11로 추려지네요. 그다음 보니까 [1]이 있습니다. 즉 1은 두번째 배열을 의미합니다.

따라서 [4,6,7,8] 배열을 의미하므로 num[1][2]는 7이 됩니다. 이해 되죠?

반응형

+ Recent posts