반응형

C언어의 함수에 값을 전달하는 방법은 아래와 같다.

https://ansan-survivor.tistory.com/1224

 

[C언어] C언어 함수 만들기, 함수 구조, 함수 템플릿, 함수 작동 순서

C언어 함수의 구조는 [return 타입] 함수명( [input타입 변수명] ) ex)  int  main(  int a  ) 함수명은 말 그대로 함수 이름 지정. input 은 이 함수가 실행되기 위한 입력 값을 지정하는것. return 타입은..

ansan-survivor.tistory.com

 

그리고 함수에 전달하는 매개변수는 원래 값을 "복사"해서 전달한다.

따라서 원래 값은 바뀌지 않고, 전달된 매개변수가 input 인자에 전달되는 것이다.

위처럼 값 1개는 간단하게 복사하여 전달할 수 있다.

하지만 동시에 여러개 매개변수를 전달하고 싶은 경우 배열을 사용해야 하는데,

C언어의 함수에서 input인자로 배열전체를 복사에서 전달하는 것을 허용하지 않는다.

 

결론부터 말하자면, 배열의 주소값을 전달해서 포인터로 접근해야 한다.

왜냐하면 배열은 결국 포인터 형태이므로 (상수형 포인터)

https://ansan-survivor.tistory.com/1249

(상수형 포인터가 무슨말인지 모르면 아래 참고)

 

[C언어] C언어 배열과 포인터의 관계 (변수형 포인터, 상수형 포인터), 포인터로 배열 변경하기

포인터에 대한 간단한 설명은 아래 참고. https://ansan-survivor.tistory.com/1237 [C언어] 포인터란? 포인터에 대해 쉽게 이해하기. (포인터 변수 사용하기, 포인터로 값 변경하기, (알아두기) 컴퓨터는 32비

ansan-survivor.tistory.com

반응형

아래 코드는 배열의 주소값인 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;
}

 

 

 

 

반응형

+ Recent posts