Search

배열

배열

동일한 자료형의 여러개의 변수를 효율적으로 관리
변수가 연속적/순차적으로 이어져있는 구조

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
복사