반응형
C언어의 함수에 값을 전달하는 방법은 아래와 같다.
https://ansan-survivor.tistory.com/1224
그리고 함수에 전달하는 매개변수는 원래 값을 "복사"해서 전달한다.
따라서 원래 값은 바뀌지 않고, 전달된 매개변수가 input 인자에 전달되는 것이다.
위처럼 값 1개는 간단하게 복사하여 전달할 수 있다.
하지만 동시에 여러개 매개변수를 전달하고 싶은 경우 배열을 사용해야 하는데,
C언어의 함수에서 input인자로 배열전체를 복사에서 전달하는 것을 허용하지 않는다.
결론부터 말하자면, 배열의 주소값을 전달해서 포인터로 접근해야 한다.
왜냐하면 배열은 결국 포인터 형태이므로 (상수형 포인터)
https://ansan-survivor.tistory.com/1249
(상수형 포인터가 무슨말인지 모르면 아래 참고)
반응형
아래 코드는 배열의 주소값인 arr을 함수에 전달해서 함수에서 배열을 수정하는 코드이다.
#include <stdio.h>
// 배열을 전달을 받는 함수
// 받는 인자는 int형 포인터
void func(int * param)
{
param[0] = 10;
param[1] = 20;
param[2] = 30;
}
int main()
{
int arr[3] = { 1,2,3 };
printf("맨처음 배열 값 {%d,%d,%d}\n", arr[0], arr[1], arr[2]);
// 받는 input인자로 배열을 받아서 내부 값을 변경
// 배열의 이름 arr은 'int형 상수형포인터' 이므로 전달 가능
func(arr);
printf("배열 내부값 변경 후 {%d,%d,%d}\n", arr[0], arr[1], arr[2]);
return 0;
}
* 알아두기
배열을 받는 인자로 int * param 대신 int param[] 으로도 전달 가능하다.
어차피 둘다 동일한 의미이며, param 이라는 주소값을 참조한다.
만약 실제로 배열을 전달한다면, 후자의 방식으로 작성해서 코드의 가독성을 향상시킨다.
하지만 이러한 전달은 오직 배열만 가능하다!
// 배열을 받는 인자로 int * param 대신 int param[] 으로도 전달 가능하다.
// 만약 실제로 배열을 전달한다면, 후자의 방식으로 작성해서 코드의 가독성을 향상시킨다.
void func(int param[])
{
param[0] = 10;
param[1] = 20;
param[2] = 30;
}
반응형
'C언어 \ C++ > 포인터 \ 배열' 카테고리의 다른 글
[C언어] C언어 2차원 배열 선언 및 초기화 (0) | 2022.02.08 |
---|---|
[C언어] C언어에서 포인터 Const 선언이 갖게 되는 의미 (0) | 2022.02.07 |
[C언어] 변수 값 바꾸기 Swap 예제 (포인터 예제 포함) (0) | 2022.02.06 |
[C언어] 배열 내에 여러 문자열 저장하기, 출력하기 (0) | 2022.02.06 |
[C언어] 포인터로 문자열 선언, 배열 문자열 선언과 차이. (문자열 내부 변경하기) (0) | 2022.02.05 |