Language/C

[포스코 AI·Big Data 아카데미 사전학습] 컴퓨터 공학 입문 1-3 함수

inji_ 2023. 6. 5. 12:12

1-3 함수

   사용자 정의 함수

    •  함수란?

      - 독립적으로 수행하는 프로그램 단위

        (프로그램에서 반복적으로 수행되는 기능을 함수로 만들어서 호출)

 

    •  C 프로그램 함수의 종류

      - 주(main)함수 : 프로그램 시작 & 종료 나타내는 함수 (꼭 있어야 함!)

      - 사용자 정의 함수 : 프로그래머가 문제분석 후 필요한 기능으로 분류하여

                                    기능별로 코딩하고자 할 때 만드는 함수

      - 시스템 라이브러리 함수 : 많이 사용되는 기능의 함수를 시스템에서

                                               미리 만들어 사용자가 사용할 수 있도록 제공하는 함수

 

    •  함수의 정의 = 함수 만들기

      - 두개의 정수를 매개변수로 입력받아 처리 후 리턴하는 함수 만들기

int add(int x, int y) // 함수의 머리

{ int sum; // 함수의 몸체
  sum = x+y;
  return sum;
  }

    •  함수 원형 (function prototype)

      - 함수 사용하기 전에 '함수의 원형'을 기술함

 

  ② 함수와 매개변수

    •  매개변수 없는 함수 만들기

#include <stdio.h> 

void hello(); //함수 원형 제시 

int main()  //매개변수 값 넘기거나 받아오지 않음 
 {
	hello(); //함수 호출 

 } 
 
 void hello()
 {
 	printf("Hello,POSCO");
 	return; // 나를 호출한 쪽으로 돌아가렴! 
 }

 

    •  매개변수 있는 함수 만들기

      - 매개변수 : 함수와 함수사이에 주고 받는 값

#include <stdio.h> 
int add(int a, int b);//함수 원형 제시 

int main()  //매개변수 값 넘기거나 받아오지 않음 
 {
 	int a=0,b=0,sum=0;
 	printf("정수값을 두개 입력하세요"); 
 	scanf("%d %d", &a, &b); //10,30
 	sum = add(a,b); //call by value : 함수 호출하며 값을 넣어 보내기 
	printf("%d +%d = %d\n",a,b,sum); 
 } 
 
 int add ( int a, int b)
 {
 	int sum;
	sum = a+b; // 매개변수 불러오면서 a,b 변수(저장공간) 따로 만듦 
 	return sum; // sum값을 호출한 쪽으로 보내자! 
 }

  ③ 함수 호출 방법

 

    •  값에 의한 호출 (call by value)

    •  주소에 의한 호출 (call by adress) : 주소를 넣어서 보낸 변수에 대해서만 함수가

                                                                 찾아와서 값을 바꿀 수 있게 하는 방법  

 

      - 포인터 변수 : 주소를 값으로 가지는 변수(저장공간)

      - 역참조 연사자 : 포인터 변수 선언 후 문장 내에서 포인터 변수 앞에*가 오면 (*p)

                                  포인터 변수가 가리키는 main 변수 값 변경가능

    •  swap 함수 코드

#include <stdio.h> 
void swap(int *p, int *q); 

int main()  
 {
 	int a=0,b=0,sum=0;
 	printf("정수값을 두개 입력하세요"); 
 	scanf("%d %d", &a, &b); //50, 100
 	swap(&a,&b); //call by address : 함수 호출하며 주소를 넣어 보내기 
	printf("두값을 swap 함수로  바꾸면 %d %d 입니다.\n",a,b); 
 } 
 
 void swap ( int *p, int *q)
 {  
    int temp=0;  
 	temp = *p; // temp에 a에 주소값 불러와서 그 값을 넣음.
	*p = *q;   // p에 q주소값(원래 b주소에 있던 값) 넣고 a주소로 가서 이 값을 넣음!  
 	*q = temp; // q에 temp값(원래  a 주소에 있던 값) 넣고 b주소로 가서 이 값을 넣음!
 }