함수의 개념
각각의 기능을 함수라는 부품으로 나누고, 필요한 부품을 합쳐서 기능을 완성하는 프로그래밍 기법을 구조적 프로그래밍이라고 한다.
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 값 자체가 주소이기 때문에 전달하면 됨