배열은 동일한 타입의 메모리를 하나의 단위로 다루기 위해 연결된 메모리이다.
배열 선언 시 상수로 할당 크기를 정해야 한다.
int n[10];
// int형 10개짜리 메모리 공간 선언 (비어 있는 상태)
double d[] = {0.1, 0.2, 0.5, 3.9};
// 자동으로 크기가 4로 정해짐 (선언과 동시에 초기화)
배열 각 원소는 배열 이름과 [ ] 안에 인덱스를 적어 접근 가능하다.
n[5] = 20; // 배열 n의 5번 자리가 20으로 초기화됨
// 5번 자리 = 6번째 칸
d[-1] = 9.9; // 인덱스는 음수 사용 불가
2차원 배열은 행과 열을 가진 배열이다.
1차원 배열을 여러개 쌓아 둔 모양이라고 생각하면 편하다.
int m[2][5]; // 2행 5열의 2차원 배열 선언
// 크기가 5인 배열 2개를 쌓아둔 모양
다음은 매개 변수로 배열을 전달받아 배열의 합을 구하는 함수 addArray()이다.
int addArray(int a[], int size) {
// 전달받은 배열 a의 값 중 size 만큼을 더한 값 구하기
}
함수 호출
int n[5] = { 1, 2, 3, 4, 5 };
int sum = addArray(n, 5); // 배열 n을 매개 변수로 전달
// -> sum = 배열 n의 값 중 인덱스 0~4만큼의 값의 합
매개 변수 a는 배열 n을 가리킨다. (포인터 개념)
매개 변수 size는 전달 받은 값 5를 복사한다.
변수를 가리키는 것과 변수의 값을 복사하여 사용하는 것의 차이점은 포인터 내용에서 다루어 볼 예정
#include <stdio.h>
int addArray(int a[], int size); // 함수의 원형 선언
void makeDouble(int a[], int size); // 함수의 원형 선언
void printArray(int a[], int size); // 함수의 원형 선언
int main() {
int n[] = { 1,2,3,4,5 }; // int n[5]로 해도 됨
int sum = addArray(n, 5); // 배열 n과 개수를 매개 변수에 전달
printf("배열 n의 합은 %d입니다\n", sum);
// 배열 n 값을 두 배로
makeDouble(n, 5); // 배열 n과 개수 5를 매개 변수에 전달
// 배열 n 출력
printArray(n, 5); // 배열 n과 개수 5를 매개 변수에 전달
}
// 배열과 개수를 전달받아 합을 리턴하는 함수
int addArray(int a[], int size) {
int i, sum=0;
for(i=0; i<size; i++)
sum += a[i];
return sum;
}
// 배열의 값을 두 배로 증가시키는 함수
void makeDouble(int a[], int size) {
int i;
for(i=0; i<size; i++)
a[i] *= 2; // 원소의 값을 2배 증가
}
// 배열을 출력하는 함수
void printArray(int a[], int size) {
int i;
for(i=0; i<size; i++)
printf("%d ", a[i]); // 원소 출력
printf("\n");