배열
•
동일한 자료형의 여러개의 변수를 효율적으로 관리
•
변수가 연속적/순차적으로 이어져있는 구조
1차원 배열
배열 선언
int int_arr[10]; // 10개의 int형 변수를 담을 수 있는 배열 선언
C
복사
배열을 선언함과 동시에 배열의 크기를 설정 → 정적할당
정적 할당으로 선언한 배열은 크기 수정 불가
[ ] 안에는 반드시 1 이상의 정수형 상수가 들어가야함 - 변수/음수/실수 불가
#define ArrSize 10 // ArrSize 는 상수 10 으로 정의
int main(){
int arr0[ ArrSize];
double arr1[ArrSize + 1];
int arr2[10];
float float_Arr [2];
long long_arr [20];
char cahr_arr [21];
}
C
복사
#include <stdio h>
int main(){
int a;
int arr[10] //크기 10 의 int 형 배열 생성
return 0;
}
C
복사
배열의 원소/첨자
•
배열 사용 위해서는 원소와 첨자(index) 이해가 필요
•
원소 = 배열의 각각의 값
•
첨자 = 이러한 원소에 접근할 수 있는 수단
•
arr[첨자]=원소
arr[0] = 10; // arr[0]원소에 있는 데이터로 10을 대입
arr[7] = 20; // arr[7] 원소에 있는 데이터로 10, 20 대입
arr[4] = 40; // 4 번째 원소에 40 을 대입 하는 예시
printf(“%d\n”, arr[4]); // 4 번째 원소를 프린트 함
scanf(“% arr[i]); // i 번째 원소에 입력
C
복사
주의
1.
배열 원소 시작 인덱스 = 0
2.
int arr[10];은 원소가 arr[0]~arr[9]까지 10개 존재함을 의미
3.
arr[10]=10;을 하면 메모리 참조 오류가 발생한다 ( 잘못된 인덱스 )
4.
배열에서 유효한 첨자의 범위는 0~(배열크기-1)
5.
배열 선언 후 초기화하지 않으면 처음 배열에는 쓰레기값이 저장된다.
#include<stdio.h>
int main(){
int arr[3];
arr[0]=10;
arr[1]=20;
arr[2]=30;
printf("%d\n", arr[0]); //10 출력
printf("%d\n", arr[1]); // 20 출력
printf("%d\n", arr[2]); // 30 출력
return 0;
}
C
복사
배열 초기화
초기화는 배열의 초기 원소 값이 쓰레기 값이 포함되는 오류를 없애기 위해서 진행
•
{}괄호를 이용한다
•
int arr[3]={0,0,0}; → arr[0]~arr[2]는 모두 0
•
반복문을 이용하면
int arr [3];
for(int i = 0; i <3; i ++) {
arr [i]=i+1;
} → 배열에 1, 2, 3이 순서대로 초기화
주의
1.
int arr[] = {0}; → 에러발생 X
2.
왜? 배열의 크기가 1인 int형 배열에 0을 삽입하는 것과 같다
3.
int arr[1]={0};과 같아지는 것
4.
그러나
5.
int arr[2]={1,2,3}; 은 배열의 크기는 2인데 원소개수가 3개이므로 에러가 발생
#include<stdio.h>
#define Max_Size 3
int main(){
int arr1[Max_Size] = {1, 2, 3};
int arr2[Max_Size] = { 3 }; // arr2[0] = 3 나머지는 0
int arr3[] = {1, 2, 3}; // 자동적으로 크기를 3 으로 잡아준다
int arr4[Max_Size] = {0}; // 모두 0 으로 초기화
printf("arr 1=");// 출력 하는 부분
for (int i=0; i< Max_Size; i++) {
printf("%2d", arr1[i]);
}
printf("\n");
printf("arr2=");
for (int i=0; i< Max_Size; i++) {
printf("%2d", arr2[i]);
}
printf("\n");
printf("arr3=");
for (int i= 0; i< Max_Size; i++) {
printf("%2d", arr3[i]);
}
printf("\n");
printf("arr4=");
for (int i= 0; i< Max_Size; i++) {
printf("%2d", arr4[i]);
}
printf("\n");
return 0;
}
C
복사
2차원배열
•
1차원 배열을 밑으로 여러개 붙여놓은 구조
•
즉, 임의의 n행과 임의의 m열을 가진 "행렬"
•
int arr[3][3]; 과 같이 선언 → 3x3행렬
int arr[3][3]; // 3x3 int형 2차원 배열
double arr[5][1]; // 5x1 double형 2차원 배열
float arr[10][10]; // 10x10 float형 2차원 배열
C
복사
첨자 - 행첨자, 열첨자 (Row index, Column index)
•
2차원 배열 역시 arr[0][0]부터 시작이고
•
마지막 인덱스는 [행크기-1][열크기-1]
#include <stdio.h>
#define Row 2
#define Column 3
int main() {
int arr[Row][Column];
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[1][0] = 4;
arr[1][1] = 5;
arr[1][2] = 6;
for (int i = 0; i < Row; i++) {
for (int j = 0; j < Column; j++) {
printf("%2d", arr[i][j]);
}
printf("\n");
}
return 0;
}
C
복사
2차원 배열 초기화
처음 2차원 배열 선언 후 초기화하지 않을시 쓰레기값이 저장되어 있음
•
{}를 이용해 초기화
•
int arr[2][2]={{1,2},{3,4}};
#include <stdio.h>
int main() {
int i2DArry[2][3] = { {1,2,3},{4,5,6} };
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%2d", i2DArry[i][j]);
}
printf("\n");
}
return 0;
}
C
복사
반복분을 사용한 초기화
#include <stdio.h>
int main() {
int i2DArry[2][3] = { {1,2,3},{4,5,6} };
int count = 1;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
i2DArry[i][j] = count++;
}
}
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%2d", i2DArry[i][j]);
}
printf("\n");
}
return 0;
}
C
복사