[C언어] #5. Array (1차원 배열)

Crush_on_Study·2022년 6월 8일
0

C언어 기초

목록 보기
6/11
post-thumbnail

진도가 조금 빠른 느낌이죠?
printf,scanf같은 입출력함수를 시작으로, 조건문 반복문 연산자까지 다뤘습니다. 오늘할거는 앞으로 포인터, 자료구조를 공부하는데 있어 가장 기초가 되는 배열입니다.


배열을 뭐라 정의할까?

배열이란 변수들이 살고있는 아파트다!

제가 배열을 설명할 때는 항상 위와 같은 문구로 시작합니다.

제가 앞에서 &(앰퍼샌드)라는 기호에 대해 설명한 적이 있었습니다.
지금 만약 &가 하는 기능이 뭔지 떠올릴 수 있다면 복습을 굉장히 잘한겁니다.

& : 변수가 저장된 메모리공간의 주소를 호출하는 것.

이처럼, 변수들은 다 제각각의 주소를 받고 있습니다. 이런 특징을 토대로 사고를 넓혀가는게 시작입니다.

#include <stdio.h>
int main()
{
	int num1 = 1;
    printf("%d\n",num1);
    int num2 = 2;
    printf("%d\n",num2);
    int num3 = 3;
    printf("%d\n",num3);
    .
    .
    .
    int num100 = 100;
    
    return 0;
}

위 소스코드는 100개의 변수를 num1 ~ num100이라는 변수명에다 넣은 것입니다.

근데 이거는 확실히 가독성이 떨어집니다. 너무 노가다죠?


Q. 그럼 반복문을 쓰면 되지않나요?

와! 너무 훌륭한 응용력입니다. 맞아요! 반복문을 쓰면 확실히 가독성 측면에선 좋아집니다.

#include <stdio.h>
int main()
{
	int i;
    for (i=1; i<=100; i++)
    {
    	printf("%d\n",i);
    }
    return 0;
}

코드분량도 짧고, 훌륭합니다. 하지만 좀 더 획기적인 개념이 하나있습니다.
그게 바로 오늘 제목에서처럼 설명할 '배열' 입니다.

배열의 모든 것을 설명하기보다는 먼저 알아야할 특징들만 말하고자 합니다.


A. 배열의 Index?

C언어에서는 인덱스 넘버의 시작은 0부터 시작합니다. 그림에서 나온 것처럼 [0],[1],[2],.. 이런 식인데요.

#include <stdio.h>
int main()
{
	int arr[5] = {1,2,3,4,5};
    
    return 0;
}

때문에, 다음과 같은 코드가 주어지면 배열 (arr)의 첫번째 원소(=1), 첫번째 인덱스 (=0)을 많이 헷갈려하십니다.
원소 인덱스 는 다릅니다.

원소는 배열에 저장된 변수를 의미하고, 인덱스는 원소의 '순번' 이라 보면 되겠습니다.

B. 배열의 주소?

굉장히 중요한 개념입니다. 다음 포스팅 때 다룰 포인터를 이해하기 위한 발걸음이에요.
위에 배열 사진을 보면, 상단에 이상한 숫자들이 보이실겁니다. 그건 배열을 통해 연속된 메모리 공간을 할당받은 변수들에게 부여된 주소값들을 의미합니다.

근데 이 주소값들에는 규칙이 있습니다. 위에 소스코드를 다시 한번 봅시다.
배열의 이름은 arr고 이 안에는 5개의 원소를 집어넣었습니다.

따라서, 5개의 메모리 공간을 할당했고, 원소[1],,,,[5]는 그에 대한 주소를 함께 받았습니다. 근데 이 원소들의 자료형은 정수 (int)입니다.

정수의 메모리 크기는 4Byte입니다. 이걸 기억한 뒤, 아래 출력 결과화면을 봅시다.

알 수 없는 숫자와 영문자로 구성되어있지만, 주목할 것은 '맨 뒷자리'입니다.
0 -> 4 -> 8 -> C -> 10인데요. 보시면 16진수로 4씩 증가하고 있음을 알 수 있습니다.

  • 배열은 어떤 자료형으로 선언되든지 간에 '연속된 메모리 공간을 할당받습니다'

오늘 내용은 상당히 중요한 개념입니다. 원래는 2차원 배열까지 묶어서 글을 쓰고자 했지만, 1차원 배열부터 확실히 익히고 가는게 좋을 듯 합니다.

profile
방구석백수 코드몽키

0개의 댓글