4. 구조적 프로그래밍

함수의 개념

각각의 기능을 함수라는 부품으로 나누고, 필요한 부품을 합쳐서 기능을 완성하는 프로그래밍 기법을 구조적 프로그래밍이라고 한다.

 

main() 함수

 

int main() 함수는 c로 만든 프로그램을 빌딩한 후 실행할 시 처음으로 실행하는 프로그램이다.

모든 c로 만든 프로그램은 int main()이라는 함수를 무조건 기본적으로 가지고 있게 된다.

 

main() 함수는 꼭 함수 이름이 main 이어야 함!

 

 

함수의 선언과 호출

 

...

리턴타입 함수이름(함수인자들)

{

리턴 타입에 따른 리턴값

}

 

int add(int a, int b){

return a+b;

}

 

int main(){

int a;

int b;

int c;

 

a=3;

b=2;

c=add(a,b);

 

return 0;

}

 

함수는 본인을 호출하는 함수보다 물리적으로 앞에 나와야 한다.

어려운 경우 미리 프로토타입만 선언해둬도 오류가 덜 난다.

 

리턴값이 필요 없는 경우의 함수가 있다.

 

void 형의 함수.

return; 만 호출하면 된다.

return;도 생략 가능하다.

 

변수가 저장하고 있는 값 (value)

변수가 메모리 공간에 위치하고 있는 주소 (address)

이 주소값을 포인터(pointer)라고 부른다.

 

변수의 주소값을 찍을 때는 "&"를 변수 앞에 추가한다.

 

int a;

a=3;

printf("값:%d    주소:%d  \n",a,&a);

 

 

함수 인자(파라미터) 전달

call by value

 

한 함수에 변수의 값을 복사하는 인수 전달 방법을 'call by value'라고 부른다.

 

 

call by reference

배열의 주소(링크)를 넘겨받아 test() 함수에서 인자값을 조작하면 main()함수에 있는 값이 변경되게 된다.

 

 

void test(int a,int* b)

{

}

 

int main()

{

int a;

int b;

 

...

test(a,&b);

 

}

 

변수의 이름을 넘겨주면 해당 변수의 값(value)을 넘겨주는 거고

&변수이름 은 해당 변수의 주소값(pointer)를 넘겨주는 것이다.

int*b는 int형 주소 변수 b라고 읽는다.

 

 

void test(int*a)

{

a=3; // a값(주소값)을 3으로 변경하라(의미 없음)

*a=40; //a가 가리키는 곳으로 가서 40값을 넣어라

}

 

scanf("%d %d", a,b); //a,b 값 자체가 주소이기 때문에 전달하면 됨