C Language Basic

C Language [핵심정리] - 38

cCcode 2021. 7. 16. 20:15

1. 함수에서 배열 매개변수 사용

함수에서 배열을 매개변수로  사용하면 연속된 값을 전달할 수 있으며, 함수 내에서 전달 된 배열의 요소들을 수정할 수 있습니다. 함수에서 배열을 매개변수로 사용하려면 괄호 안에 매개변수 뒤 대괄호(크기 지정 X)를 사용하거나 포인터로 지정해주면 되요.

매개변수 대괄호 명시
매개변수 포인터 명시
함수에 매개변수 배열
결과

제가 저번시간에 대괄호에 들어가는 배열 크기를 생략한다고 했는데,, 그렇게 되면 함수에서는 배열의 실제 크기를 알지 못하기 때문에 그를 이용한 코드를 작성하고 나중에 수정할 때 에러 사항이 생깁니다. 그래서 sizeof(배열) / sizeof(자료형)을 통해 배열의 크기매개변수로 동시에 주게 된다면 배열의 크기를 알아 코드 작성이 용이할 뿐 만 아니라 유지보수 하는데도 도움이 됩니다.

 

여러분이 알고있는 것처럼 배열 또한 포인터의 일종입니다. 처음 요소의 주소를 가리키고 있는 포인터 말이죠. 애초에 포인터가 아니었다면 함수를 정의할 때 매개변수로 포인터를 주지 못했겠죠. 그렇기 때문에 함수 내부에서 배열의 요소를 수정한다면 그 수정된 결과는 외부에도 영향을 줍니다.

수정한 배열의 값
결과

 

이번에는 대괄호 대신 포인터로 지정해보겠습니다.

포인터 매개변수
결과

여기서 또한 포인터 이므로 배열의 요소를 변경하면 외부의 요소 또한 변경됩니다. 그 성질을 이용해 특정 요소의 값을 바꿀 수 있습니다. 

특정 인덱스의 값 교환
결과

결과를 보시면 배열 또한 외부의 값에 영향을 미친다는 것을 다시 한번 확인할 수 있습니다.

만약 복합 리터럴을 사용한다면 굳이 main 함수에서 배열을 넘겨줄 때 배열을 선언하지 않아도 됩니다. (해당 기능은 C99부터 추가되었으니 DEV C++같은 컴파일러들에는 해당되지 않으니 주의가 필요합니다.)

복합 리터럴 사용하기
복합 리터럴로 배열을 넘겨줌
결과

 

이제 2차원 배열을 매개변수로 주는 방법에 대해 알아보시죠. 2차원 배열은 매개변수 명 뒤 [][가로크기] 를 사용해서 가로 크기를 지정하거나 괄호로 묶은 포인터 뒤 []를 사용하고 가로 크기지정하면 됩니다. 설명만 들으니, 1차원 배열보다 어렵게 느껴지죠? 

매개변수 가로크기 지정
포인터 매개변수 가로크기 지정
2차원 배열 매개변수
2차원 배열 매개변수 - 2
결과

저희가 2차원 배열을 매개변수로 할 때 첫 번째 대괄호에는 세로크기 지정하더라도 무시됩니다. 따라서 arr[ ][3]의 실제 크기는 알 수 없기 때문에 다른 매개변수로 배열의 가로와 세로크기를 받아와야 합니다.

 

이제 2차원 배열을 매개변수로 사용할 때 포인터대괄호를 사용해보겠습니다. (방금은 대괄호만 이용했습니다.)

수정 부분
결과

 

+ 2차원 배열의 복합 리터럴 사용

2차원 배열 또한 복합 리터럴을 사용해 함수에 값을 넘겨줄 수 있습니다.

복합 리터럴 사용하기(2차원 배열)
복합 리터럴 사용
결과