이번에는 배열을 배워보겠습니다.
이런 코드가 있을때 변수를 하나하나 선언하기는 힘듭니다.
사람 100명이 있는데 100명마다 변수를 하나씩 선언하는건 그야말로 노가다겠죠.
하지만 배열을 이용하면 한번에 선언할수 있습니다.
이런식으로 변수이름뒤에 [길이]를 적어주는겁니다.
저 코드는 100개의 int형 변수를 선언하게 되는겁니다.
그리고 배열변수는 위와같이 초기화할수 있습니다.
그리고 위와같이 연산하거나 참조할수도 있습니다. abc[3]을 배열에 4번째에 있는 변수에 해당합니다.
abc[3]인데 왜 4번째일까요?
그건 배열이 0부터 시작하기때문입니다. abc[0] , abc[1],. abc[2] .... abc[9]로 0부터 순서대로 있습니다.
길이가 10 이상으로 길어질경우 오류가나는걸 볼수있습니다.
배열이 0부터시작하는건 배열의 메모리구조를 보면 알수있는데요.
배열이란놈은 대충 이렇게 생겨먹었습니다. 저 한칸마다 int형변수 한개씩 들어있다고 보시면 됩니다.
그리고 abc는 바로 저 배열의 첫번째 공간의 메모리주소를 담고있는것입니다.
실제로 abc를 출력해보면 그 배열의 메모리주소가 나옵니다!
메모리주소에 대해서는 저번에 scanf를 배울때 잠깐 배운적이 있었죠.
[C언어 강좌] #7 - scanf , 메모리 주소 <- 이 강좌에서 주소와 관련해서 설명한적이 있었습니다.
변수앞에 &를 붙여서 변수의 메모리주소를 가져올수 있었다고 배웠었죠.
abc[0]의 주소를 가져와보면 abc의 주소와 똑같습니다. 신기하죠?
abc[ ]이부분에 넣는 숫자의 정체는 이 숫자를 넣은만큼 메모리주소를 이동하는겁니다.
abc[0]이 기준이되는 메모리주소로 뒤에 적는 숫자에따라서 메모리공간을 얼마나 이동하는지 결정됩니다.
근데 실제로 메모리공간은 저따구로 생겨먹지 않았죠? 컴퓨터는 모든것을 0과 1로 표현합니다.
대충 이런느낌이라고 보는게 더 정확하겠죠.
배열이 int형변수를 담고있고 int형변수는 4바이트기때문에 4바이트씩 이동하게됩니다.
하나의 메모리주소당 1바이트씩 담고있으니 이동할때마다 주소가 4씩 늘어나게되죠.
한번 abc[0]과 abc[1]의 주소값을 출력해서 비교해보면 한번에 4가 늘어난것을 볼수 있습니다.
2바이트의 변수에서 이동하면 2씩, 8바이트면 8씩 늘어나겠죠.
그리고
int a[5];
a[3] = 10;
이 두가지에서 쓰이는 [5]와 [3]은 다른것입니다.
a[5]는 int형변수를 5개 만든것과 같은가지인겁니다. 여기서 [5]는 크기를 나타내는거죠.
하지만 a[3] = 10;에서는 몇번째 메모리주소로 이동하는지 적어놓는겁니다.
'프로그래밍 > C 기초' 카테고리의 다른 글
[C언어 강좌] #16 - 문자와 아스키코드 , 16진수 (0) | 2016.12.22 |
---|---|
[C언어 강좌] #15 - 다차원 배열 (0) | 2016.12.21 |
[C언어 강좌] #13 - 지역변수 (0) | 2016.12.19 |
[C언어 강좌] #12 - switch문 (0) | 2016.12.18 |
[C언어 강좌] #11 - 반복문 for (0) | 2016.12.17 |