당연하겠지만 배열도 함수로 전달이 가능합니다.
하지만 배열은 값에의한 호출이 아닌 원본 그대로 전달된다는것을 알아야됩니다.
이에 대해서는 포인터를 배워야되니 원본이 전달된다는것만 알아두세요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | /*학생들의 성적을 저장하고 있는 정수 배열을 만들고 평균을 계산하는 함수를 작성*/ #include <Stdio.h> #define STUDENTS 5 int get_avg(int scores[], int size); //1 , 원형을 정의. 배열을 받는 매개변수는 크기를 적어주지 않아도됨. int main() { int sco[STUDENTS] = { 1,2,3,4,5 }; int avg; avg = get_avg(sco, STUDENTS); printf("평균은 %d입니다.\n", avg); return 0; } //배열에 들어 있는 값들의 평균 계산 int get_avg(int scores[], int size) //2 scores[] 원본 배열이 전달 { int i; int sum = 0; for ( i = 0; i < size; i++) // 반복하면서 배열의 모든 요소들의 합을 계산. { sum += scores[i]; } return sum / size; } | cs |
원본 배열의 변경
앞서 말했다시미 원본배열이 바뀐다고 하였습니다.
매개 변수를 통하여 원본을 참조하기때문에 항상 조심하여야됩니다. 만약 함수 안에서 매개 변수를 통하여 배열 요소를 변경한다면 이것은 원본 배열을 변경시키는 결과가 나옵니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | /*원본 배열의 변경, 1차원 배열을 조작하는 함수*/ #include <stdio.h> #define SIZE 7 void modify_array(int a[], int size); void print_array(int a[], int size); int main() { int list[SIZE] = { 1,2,3,4,5,6,7 }; print_array(list, SIZE); modify_array(list, SIZE); print_array(list, SIZE); // 원본이 전달 return 0; } // a[]를 변경하면 원본이 변경된다. void modify_array(int a[], int size) // modify_array()는 배열을 인수로 받아서 배열내의 모든 요소를 하나 증가. 배열은 원본이 전달되므로, 호출된 함수가 배열의 요소를 수정하면 원본 배열의 내용도 동시에 수정 //const int 함수를 사용시 컴파일 에러가 뜬다(수정을 못함) { int i; for (i = 0; i < size; i++) { a[i]=a[i]*a[i]; } } // 배열 요소들을 출력 void print_array(int a[], int size) { int i; for (i = 0; i < size; i++) { printf("%3d", a[i]); } printf("\n"); } | cs |
원본 배열의 변경을 금지시키려면 앞에 배운 const지정자를 사용하면 된다.
'C 프로그래밍 > 8. 배열' 카테고리의 다른 글
8.4 2차원 배열 (0) | 2019.06.18 |
---|---|
8.3 정렬과 탐색 (0) | 2019.06.18 |
8.1 배열이란?, 배열의 초기화 (0) | 2019.06.18 |