당연하겠지만 배열도 함수로 전달이 가능합니다.

하지만 배열은 값에의한 호출이 아닌 원본 그대로 전달된다는것을 알아야됩니다.

이에 대해서는 포인터를 배워야되니 원본이 전달된다는것만 알아두세요.


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