배열을 통째로 함수의 인자로 전달하는 것은 불가능하다. 그러나 배열을 함수의 인자로 전달하면 배열 시작점의 주소값이 전달 되기 때문에 함수의 매개변수를 포인터 변수로 선언하면 포인터 변수를 이용하여 배열에 접근할 수 있다.

#include <stdio.h>

void ShowArrayElem(int * param, int len)
{
    for(int i = 0; i<len; i++){
        printf("%d ", param[i]);
    }
    printf("\n");
}

int main(void)
{
    int arr1[] = {1,2,3};
    int arr2[] = {4,5,6,7,8};
    ShowArrayElem(arr1, sizeof(arr1)/4);
    ShowArrayElem(arr2, sizeof(arr2)/4);
    return 0;
}

/* output : 
1 2 3 
4 5 6 7 8
*/

 

#include <stdio.h>

void ShowArrayElem(int * param, int len)
{
    for(int i = 0; i<len; i++){
        printf("%d ", param[i]);
    }
    printf("\n");
}

void AddArrayElem(int * param, int len, int add)
{
    for(int i = 0; i < len; i++)
    {
        param[i] += add;
    }
}

int main(void)
{
    int arr[3] = {1,2,3};
    AddArrayElem(arr, sizeof(arr)/4, 1);
    ShowArrayElem(arr, sizeof(arr)/4);

    AddArrayElem(arr, sizeof(arr)/4, 2);
    ShowArrayElem(arr, sizeof(arr)/4);
    return 0;
}
/* output : 
2 3 4 
4 5 6
*/

위 코드와 같이 주소 값만 알면 배열에 저장된 값의 변경도 가능하다.

 

배열을 함수의 인자로 전달받을 때는 다음과 같은 선언도 가능하다. int * param과 동일한 의미이다.

void ShowArrayElem(int param[], int len)

 

'Language > C, C++' 카테고리의 다른 글

[C] 포인터에서 const 사용  (0) 2020.12.20
[C] Call - by - value, Call - by - reference  (0) 2020.12.20
[C] 포인터 배열  (0) 2020.12.19
[C] 문자열 포인터  (0) 2020.12.18
[C] 포인터 연산  (0) 2020.12.17

재귀함수는 함수 내에서 자기 자신을 다시 호출하는 함수를 의미한다. 함수가 실행하는 도중 자기 자신의 함수가 호출되면 자기 자신의 복사본을 하나 더 만들어서 복사본을 실행하게 된다. 

재귀함수는 한번 호출되면 계속 호출되는 문제가 있기 때문에 재귀를 탈출시키는 조건이 있어야 한다.

#include <stdio.h>

void Recursive(int num)
{
    if(num<=0)  // 재귀 탈출 조건
        return; // 재귀 탈출
    printf("Recursive call! %d \n",num);
    Recursive(num-1);
}

int main(void)
{
    Recursive(3);
    return 0;
}
/* output:
Recursive call! 3
Recursive call! 2
Recursive call! 1
*/

 

'Language > C, C++' 카테고리의 다른 글

[C] 1차원 배열(2)  (0) 2020.12.14
[C] 1차원 배열(1)  (0) 2020.12.12
[C] register 변수  (0) 2020.12.10
[C] static 변수  (0) 2020.12.10
[C] 전역변수  (0) 2020.12.09

해결해야 할 문제의 규모가 크거나 복잡할 때 main 이라는 하나의 함수에서 모두 해결하는 것보다 문제 해결에 필요한 기능들을 분석하고 분석 결과를 바탕으로 작은 함수들로 나누어서 해결하는것이 쉽고, 효율적이다.

 

자주 사용하는  printf() 같은 경우도 인자를 콘솔에 출력하는 일종의 함수이다.

 

함수는 전달인자의 유무와 반환 값의 유무에 따라 4개의 형태로 나눌 수 있다. 

전달인자와 반환값이 모두 있는 경우, 전달인자만 있고 반환값은 없는 경우, 전달인자가 없고 반환값만 있는 경우, 전달인자와 반환값이 모두 없는 경우로 총 4가지가 있다.

 

전달인자와 반환값이 모두 있는 경우

두 수의 덧셈 기능을 하는 함수로 예를 들면 전달인자는 int형 정수 두 개 이고, 덧셈 결과는 반환이 되고, 반환형도 int 형이다. 함수의 이름은 Add로 한다.

함수 호출 시 전달 되는 인자를 매개변수라 한다. 

함수를 정의하고 호출하는 코드는 다음과 같다.

#include <stdio.h>

int Add(int num1, int num2) // 반환형 함수이름(매개변수1, 매개변수2)
{
    return num1 + num2;     // 값 반환
}

int main(void)
{
    int result = Add(3,5);
    printf("Add Result : %d\n", result);
    return 0;
}
// output : Add Result : 8

int result = Add(3,5); 를 보면 함수의 호출문이 반환하는 값으로 대체된다는 것을 알 수 있다.

함수가 호출되면 호출된 함수의 영역으로 실행의 흐름이 이동한다.

 

전달인자나 반환값이 존재하지 않는 경우

void 라는 반환형은 반환하지 않는다 라는 뜻이 담겨 있다. void로 반환형이 지정된 함수의 몸체에는 return문이 없다.

매개변수의 선언 위치에 void가 들어가면 인자를 전달하지 않는다는 뜻이다.

반환형과 매개변수의 위치에 둘다 void를 사용하여 전달 인자와 반환값이 모두 존재하지 않는 함수도 정의할 수 있다.

#include <stdio.h>

int Add(int num1, int num2) // 인자 전달, 반환값
{
    return num1 + num2;
}

void ShowAddResult(int num) // 인자 전달
{
    printf("Add Result : %d", num);
}

int ReadNum(void)   // 반환값
{
    int num;
    scanf("%d", &num);
    return num;
}

void HowToUseThisProg(void)
{
    printf("If you input two number, print add result.\ninput two number.\n");
}

int main(void)
{
    int result, num1, num2;
    HowToUseThisProg();
    num1 = ReadNum();
    num2 = ReadNum();
    result = Add(num1,num2);
    ShowAddResult(result);
    return 0;
}

 

return

키워드 return은 두가지 의미가 있다. 값을 반환하며 함수를 빠져나간다는 의미지만, return문 뒤에 반환한 값이 없는 경우 값의 반환 없이 함수만 빠져나간다는 의미로 사용할 수 있다.

 

int Add(int num1, int num2);

int main(void)
{
	int result = Add(3,4);
    printf("%d",result);
    return 0;
}

int Add(int num1, int num2)
{
	return num1+num2;
}

위 코드와 같이 함수의 선언을 먼저 하고 호출 된 후에 정의를 할 수도 있다. 함수의 선언에는 매개변수의 갯수와 자료형의 정보만 포함하면 된다. 따라서 다음과 같이 매개변수의 이름을 생략하여 함수를 선언할 수 있다.

int Add(int, int);

 

'Language > C, C++' 카테고리의 다른 글

[C] 전역변수  (0) 2020.12.09
[C] 지역변수  (0) 2020.12.09
[C] goto  (0) 2020.12.08
[C] switch  (0) 2020.12.08
[C] continue  (0) 2020.12.05

화살표 함수: 화살표 기호(=>)를 이용하여 함수를 작성하는 방법. 기존 함수보다 단순하고 간결한 문법으로 함수를 만들 수 있다. 

 

let sum (a,b) => a + b; //화살표함수

let sum = function(a, b){	//원래 함수
	return a+b;
};		

 

'Web > Develop' 카테고리의 다른 글

[PHP] PDO로 데이터베이스(mysql) 연결  (0) 2020.06.14
[PHP] phpinfo  (0) 2020.06.12
[JavaScript] 함수 표현식과 함수 선언문  (0) 2020.01.27
[JavaScript] confirm()  (0) 2020.01.27
[JavaScript] prompt()  (0) 2020.01.26
// 함수 선언문
function sum(a, b){
	return a+b;
}
// 함수 표현식
let sum = function(a, b){
	return a+b;
};

함수 선언문은 스크립트 실행 준비 단계에서 생성되기 때문에 함수 선언문의 앞에서도 호출이 가능하나 함수 표현식은 코드의 순서대로 순차적으로 생성 되어 표현식이 선언된 후에만 접근할 수 있다.

'Web > Develop' 카테고리의 다른 글

[PHP] PDO로 데이터베이스(mysql) 연결  (0) 2020.06.14
[PHP] phpinfo  (0) 2020.06.12
[JavaScript] 화살표 함수  (0) 2020.02.02
[JavaScript] confirm()  (0) 2020.01.27
[JavaScript] prompt()  (0) 2020.01.26

confirm : 매개 변수로 받은 질문과 확인 및 취소 버튼이 있는 창을 띄우는 함수

확인을 누르면 참(true), 취소를 누르면 거짓(false)를 반환.

 

confirm('Are you female??')

 

'Web > Develop' 카테고리의 다른 글

[PHP] PDO로 데이터베이스(mysql) 연결  (0) 2020.06.14
[PHP] phpinfo  (0) 2020.06.12
[JavaScript] 화살표 함수  (0) 2020.02.02
[JavaScript] 함수 표현식과 함수 선언문  (0) 2020.01.27
[JavaScript] prompt()  (0) 2020.01.26

+ Recent posts