배열
배열은 동일한 데이터 타입의 여러 값을 하나의 이름으로 연속해서 저장하는 자료 구조
예시
자료형 | 변수이름 | 요소개수 |
short | student | [20] |
short student[20]; 은 2바이트 정수형 데이터를 20개를 저장할 수 있는 배열을 student라는 이름으로 선언한다는 뜻이다.
[]대괄호를 이용하여 저장공간을 몇 개 만들 것인지 명시하면된다 이때 저장할 요소 개수는 반드시 숫자 상수로 명시해야한다. (short는 2바이트 2x20 = 40바이트)
배열의 특정 요소에 값 대입할려면
student[1] = 10;
명령문을 사용하면된다
student[0] | student[1] | student[2] | student[3] | .... | student[18] | student[19] |
10 | .... |
배열 초기화하기
배열 문법은 지역변수를 그룹으로 묶은 것이기 떄문에 배열 문법으로 선언한 변수도 지역 변수처럼 자동으로 초기화 되진 않는다.
그래서 각 요소에 일정한 값을 대입하여 초기화해서 사용해야합니다.
초기화를 하지 않았을때
#include <stdio.h>
void main()
{
short student[20];
student[1] = 10;
printf("%d %d\n", student[1], student[2]);
}
초기화 했을때
#include <stdio.h>
void main()
{
short student[20], i;
for (i = 0; i < 20; i++) student[i] = 0;
student[1] = 10;
printf("%d %d\n", student[1], student[2]);
}
배열의 요소를 초기화 하지 않고 사용하면 예상하지 못한 값이 들어가게 됩니다.
그래서 예상할 수 있는 값으로 배열의 요소들을 초기화 하는것이 기본입니다.
(일반적으로 0을 사용)
배열로 문자열 표현하기
c언어에서 문자를 저장하는 데 가장 적합한 자료형은 char형입니다.
예시로 happy 라는 단어를 적기위해선
char data[6] = {'h', 'a','p','p','y',0}; //0라고 적어도 되고 \0 이라고 적어도 된다.
//최적화 시
char data[6] = "happy";
총 6개의 배열이 필요합니다.
0을 대입한 이유는 문자 끝에 NULL을 입력해 줌 으로써 이 배열에 저장된 정보는 문자열이다 라고 선언한것과 같기 때문입니다.
2차원 배열
앞에 있는 내용들은 1차원 배열이고 지금은 2차원 배열에 대해 적어보겠습니다.
char data[5][4];
/*
data[4][5] 가 아닌 [5][4] 인 이유는
연산자 우선순위 때문 []연산자는 동일한 우선순위를 가질 때
왼쪽에서 오른쪽으로 연산을 수행하기 때문
*/
char = 자료형
data = 변수 이름
[5] = 그룹 개수(행)
[4] = 그룹당 세부 요소 개수 (열)
data의 변수의 크기는 (자료형의 크기) X (행 개수) X (열 개수) = 1x5x4=20byte 입니다.
열 행 |
data[0][0] | data[0][1] | data[0][2] | data[0][3] |
data[0][0] | data[0][0] | data[0][1] | data[0][2] | data[0][3] |
data[1][0] | data[1][0] | data[1][1] | data[1][2] | data[1][3] |
data[2][0] | data[2][0] | data[2][1] | data[2][2] | data[2][3] |
data[3][0] | data[3][0] | data[3][1] | data[3][2] | data[3][3] |
data[4][0] | data[4][0] | data[4][1] | data[4][2] | data[4][3] |
data 변수에 2번째 행, 3번째 열에 10이라는 값을 넣는다고하면
data[1][2] = 10;
실제로는 컴퓨터가 2차원 개념을 제공하지 않기 때문에 1차원 형태로 메모리에 저장됩니다.
c언어의 꽃은 배열과 포인터라고 생각된다.
솔직히 지금도 수박 겉핣기라고 생각한다.
'language > C language' 카테고리의 다른 글
C language :: 2 (1) | 2024.11.10 |
---|---|
C language :: 1 (0) | 2024.11.10 |