이신플러스의 달콤쌉싸름한 낙원

반응형

본 게시물은 ocu컨소시엄에서 진행되는 예제로배우는c언어의

강의를 본인의 공부공간인 이신플러스 블로그에 정리한 글입니다.


C언어는 배우기는 쉽지만

마스터하기 어려운 언어입니다.

c언어로 인해 파이선,씨플러스,씨플플 등의 고급언어가 탄생하게됩니다.




피니엔진을 사용하는 저는 루비언어가 필요하기때문에 매우기초적 언어라고 볼수있습니다.


학습목표

함수의 인자 전달 방법 중 값에 의한 전달 방법과 포인터에 의한 전달방법에 대해 알아본다.

함수의 인자로 배열을 전달하는 방법을 알아본다.

함수의 인자로 구조체를 전달하는 방법을 알아본다.

재귀함수의 개념과재귀 함수를 정의한다.


값에 의한 전달(pass by value: call by value)


값에 의한 전달은 함수를 호출할 때 넘겨주는 인자의 값을 함수 정의에 있는 매개변수를 복사해서 전달하는 방식이다.


(원본을 건드는것이아니기떄문에 씰 매개변수가 영향을받지않습니다)

함수호출GetFactorial(5);




함수 호출Swap(a, b);



(매개변수는 복사가 되지만 원본이 변경이 안됬다.)


void Swap(int *x,int *y)

{

int temp;


temp = *x;

*x = *y;

*y = temp;

}

(주소를 알려줘야한다. 포인트 변수만 가능하기 떄문에 정수 int 함수를 넣는다)

x,y내용을 바꿔주는 역활을 한다.


결과는 교환이 된것을 확인할수있다.


포인터에의한전달

-함수 호출시 전달되는 인자는 인자의역활에 따라 입력인자와 출력인자, 입출력 인자로 구분할 수 있다.


int GetFactorial(int n);

int a=10;


포인터에의한전달방법을 이용하면 함수의 처리 결과를 인자로받아올수 있다.

void GetResult(int x, int y, int *sum, int*product)


포인터에의한전달방법으로 함수의처리결과를 받아오는과정

-함수를 선언할 때, 처리결과를 받아올 매개변수를 포인터 형으로 선언한다.


배열의전달

-배열은 값에 의한 전달 대신 포인터에 대한 전달 방법으로 전달한다.

-함수의 매개변수는 배열의 원소에 대한 포인터 형으로 선언한다.

-함수의 인자로 배열을 전달할 떄는 포인터를 받아오지만 함수 안에서는 마치 일반 배열인 것처럼 사용하면 된다.


(배열은 주소를 알려주는 방식으로 넘기는게 바람직하다[포인트] 씰매개변수는 (&.&))


-함수에 인자를 전달할때 배열의 크기를 함께 넘겨줄 수 있다.

void PrintAArray(int *arr, int size)


arr[i]; <-----------

[포인터를 마치 배열이름처럼 사용하고있다.]


배열을 인자로갖는 함수정의시

-배열의 원소에 대한 포인터 형을 매개변수의 데이터형으로 지정

-포인터 형으로 쓰는 대신 크기를 생략한 배열로 써주기도 함


-함수 안에서 인자로 전달받은 배열의 크기구하기

int size = sizeof(arr) / sizeof(arr[0]); 배열의원소의 크기를 구한다.


-함수 안에서 인자로 전달받은 배열의 주소(포인터)로부터 배열의 크기를 구할 수 없으므로


배열의 크기도 별도의 인자로 전달한다.

dest와src는 문자 배열의 주소이다.


-배열이 함수 안에서 이용만 될 뿐 변경되지 않을때는 매개변수의 포인터형에 const를 지정한다.


구조체의 전달

-구조체를 값에 의한 전달 방법으로 전달하면 함수를 호출할때마다 구조체가 복사된다.

-구조체를 포인터로 전달하면 구조체의 주소를 전달하므로 불필요한 구조체의 복사를 막을수 있다.

PrintPoint (&p1);




재귀 함수의 정의

-자기 자신을 호출하는 함수

-재귀 함수가 무한히 자기 자신을 호출해서는 안된다.


n<=1 일때 n!=1

n > 1 일때 n!=n*(n-1)!


int GetFactorial(int n)

{

if(n<=1)

return 1;

return n * GetFactorial(n-1);

}


같은 방식으로 5!를 호출하려면 GetFactorial (5);

하고 5번의 리턴을 거치면됩니다


반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading