-개별변수를 사용하면 번거롭기 때문에 배열을 사용하면 된다.
-한 번에 여러 개의 변수 생성 가능
-배열 vs 변수 : 배열에는 여러 개의 변수가 들어갈 수 있다.
-같은 종류의 대량의 데이터를 반복문을 사용해서 효율적이고 간편하게 처리할 수 있다.
for(i=0; i<5; i++)
grade[i] = 0;
-정의 : 동일한 타입의 데이터가 여러 개 저장되어 있는 데이터 저장 장소이다.
배열 이름에 번호를 붙여서 각각의 데이터들을 접근한다.
여러 개의 값을 하나의 이름으로 처리할 수 있다. (조작이 편리하다.)
-연속적인 공간에 저장, 하나의 이름을 공유하고 단지 번호만 달라 서로 관련된 데이터를 차례로 접근하여 처리할 수 있다.
-배열 요소/배열 원소 : 배열을 구성하는 각각의 항목 ex) s[0], s[1] …
인덱스/첨자 : 배열 요소의 번호
-배열의 선언
int s[10]; //10개의 정수를 저장할 수 있는 배열 s
자료형/ 배열이름 / 배열크기
인덱스는 항상 0부터 시작한다. 유효한 인덱스의 범위는 0~(배열크기-1)
int grade[5];
...
grade[5] = 60; //오류! 배열의 크기를 벗어남
-배열 원소 접근
score[0] = 80;
-배열의 초기화
int scores[5] = {1,2,3,4,5}
int scores[5] = {1,2,3} //뒤의 나머지는 0으로 초기화
int scores[5] = {0} //모두 0
int scores[ ] = {1,2,3,4,5} //초기 값의 개수가 배열의 크기
배열의 크기가 주어지지 않으면 자동적으로 초기값의 개수만큼 배열의 크기로 잡힌다.
배열을 지역변수로 선언하면 초기화되지 않은 배열은 쓰레기 값을 가지게 된다.
-배열원소의 개수 계산
int grade[] = {1,2,3,4,5,6} int i, size; size = sizeof(grade) / sizeof(grade[0]); //전체 배열의 크기를 배열 요소의 크기로 나눔 //sizeof 연산자는 크기를 바이트 단위로 계산
-배열의 복사
반복구조를 사용해서 원소를 일일이 복사해야 한다.
int i; int a[SIZE] = {1,2,3,4,5}; int b[SIZE]; for(i=0;i < SIZE; i++) b[i] = a[i];
-배열 의 비교
배열의 이름은 배열이 저장된 메모리의 주소와 같다.
for(i=0; i < SIZE ; i++) { if ( a[i] != b[i] ) { printf ("다름"); break; } }
-배열원소의 역순출력
-배열과 함수
배열도 함수로 전달할 수 있다.
(함수 호출 시에 값에 의한 호출이 이루어진다. 인수의 값이 매개 변수로 복사된다.)
배열은 사본이 아닌 원본이 저장된다. ( 주소값이 복사되어 입력되어 주소를 통해 접근되기 때문에 수정이 된다) 배열은 원본이 전달되어 호출된 함수가 배열의 요소를 수정하면 원본 배열의 내용도 수정된다.
(+배열 요소는 복사본이 전달된다)
-원본 배열의 변경을 금지하는 방법
const를 사용한다
void print_array(const int a[], int size)
※2차원 배열
int s[3][10];
2차원 배열에서 하나의 요소를 참조하려면 2개의 인덱스가 필요하다 i,j
2차원 배열은 1차원적으로 구현된다.
앞부분을 반 뒷부분을 번호라 생각
-2차원 배열의 초기화
int s[3][5] = { {0,1,2,3,4}, {0,1,2,3,4}, {0,1,2,3,4} };
int s[][5] = { {0,1,2,3,4}, {0,1,2,3,4}, {0,1,2,3,4} };
행의 개수를 지정하지 않아도 된다. 몇 개가 올 지를 적지 않아도 자동으로 숫자가 정해진다. (열의 개수는 반드시 지정) (전역변수로 선언되어 있는 경우 컴파일러가 요소들의 값을 0으로 초기화한다. 지역변수는 쓰레기 값이 들어가게 된다.)
int s[][5] = { {0,1,2}, {0,1,2}, {0,1,2} };
각 행의 나머지 2개는 0으로 초기화된다
int s[][5] = { 0,1,2,3,4,5,6,7 };
안쪽의 중괄호를 생략해도 된다
※3차원 배열
int s[6][3[5];
첫번째 인덱스 학년, 두번째~
자주 까먹는 부분
for (i = 0; i < 5; i++) printf("grade[%d]=%d\n", i, grade[i]);
for (i = 0; i < SIZE; i++) scanf("%d", &grade[i]);
sum += grade[i];
'C > 정리' 카테고리의 다른 글
[코드업] 기초100제 (0) | 2022.01.25 |
---|---|
문자열 사이즈,비교 (0) | 2021.11.17 |
배열의 동적할당 (0) | 2021.11.09 |
함수 호출- 문자열일 경우 (0) | 2021.11.09 |
[C언어] &와 && 차이 (0) | 2021.07.20 |