GiantStepDEV

ํ•จ์ˆ˜

์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๋ฐ˜๋ณต๋˜๋Š” ๋ช…๋ น์–ด๋ฅผ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๋ฌถ์–ด์ฃผ๋Š” ๊ธฐ๋Šฅ

returnType

ํ•จ์ˆ˜๊ฐ€ ๋ฌถ์€ ๋ช…๋ น์–ด๋ฅผ ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ๊ฐ’์„ ์–ด๋–ค dataType์œผ๋กœ ๋Œ๋ ค์ค„๊ฑด์ง€?
returnTytpe์ด ์—†๋Š” ๊ฒฝ์šฐ๋Š” ๋ฆฌํ„ด๊ฐ’์ด ์—†๋‹ค๋Š” ์ด์•ผ๊ธฐ ์ด๋ฏ€๋กœ void๋กœ ์ง€์ •ํ•˜๋ฉด ๋จ.
returnType์ด ์žˆ์œผ๋ฉด ๋ฆฌํ„ด๊ฐ’์ด ์žˆ๋‹ค๋Š” ์ด์•ผ๊ธฐ ์ด๋ฏ€๋กœ ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ๋ฐ˜๋“œ์‹œ return๋ฌธ์ด ์žˆ์–ด์•ผ ํ•จ.

return ๋ฌธ

๊ฒฐ๊ณผ๊ฐ’์„ ํ•จ์ˆ˜์˜ ์™ธ๋ถ€๋กœ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• 

ํ•จ์ˆ˜๋ช…

ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฆ„

๋งค๊ฐœ๋ณ€์ˆ˜(parameter)

ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ „๋‹ฌ๋œ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ๊ฐ€์ง€๊ณ  ์˜ค๋Š” ๋ณ€์ˆ˜
๋งค๊ฐœ๋ณ€์ˆ˜ ์—†์œผ๋ฉด ๊ณต๋ž€์œผ๋กœ ๋‘๋ฉด ๋จ.
returntype ํ•จ์ˆ˜๋ช…(๋งค๊ฐœ๋ณ€์ˆ˜) { ๋ช…๋ น์–ด ๋‚˜์—ด }
์˜ˆ) int add(int a, int b) { return a + b; }

ํ•จ์ˆ˜์˜ ์žฅ์ 

(1) ์žฌ์‚ฌ์šฉ์„ฑ - ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ์คŒ
(2) ๋ชจ๋“ˆ์„ฑ
(3) ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง„๋‹ค.
#include <stdio.h>

void PrintMonster() {
	printf("Monster!\n");
	printf("Monster!\n");
	printf("Monster!\n");
}

int add(int a, int b) {
	return a + b;
}

int sub(int a, int b) {
	return a - b;
}

int mul(int a, int b) {
	return a * b;
}

float div(int a, int b) {
	return a / (float)b;
}

int main() {
	PrintMonster();
	PrintMonster();

	int a = 20;
	int b = 30;

	int ret = add(a, b);
	printf("%d + %d = %d\n", a, b, ret);

	ret = sub(a, b);
	printf("%d - %d = %d\n", a, b, ret);

	ret = mul(a, b);
	printf("%d * %d = %d\n", a, b, ret);

	float fret = div(a, b);
	printf("%d / %d = %f\n", a, b, fret);

	return 0;
}

C์–ธ์–ด ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ๋ฒ•

  1. call by value : ๊ฐ’์— ์˜ํ•œ ํ˜ธ์ถœ
  2. call by address : ์ฃผ์†Œ์— ์˜ํ•œ ํ˜ธ์ถœ(argument์˜ ์ฃผ์†Œ๊ฐ’ ๊ณต๊ฐ„์— ์ ‘๊ทผํ•˜๊ฒ ๋‹ค)

์ธ์ž(argument)

ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ „๋‹ฌํ•˜๋Š” ๊ฐ’

(1) call by value

#include <stdio.h>

void swap(int a, int b) {
	int temp = 0;
	temp = a;
	a = b;
	b = temp;
}


int main() {
	int a = 20;
	int b = 30;
    
	swap(a, b);
	printf("a = %d, b = %d\n", a, b);

	return 0;
}
์‹คํ–‰ํ™”๋ฉด
a = 20, b = 30

 * argument๋ฅผ '๊ฐ’'์œผ๋กœ parameter์— ์ „๋‹ฌ

=> swap() ํ•จ์ˆ˜๋Š” a,b๋ฅผ ๋ฐ”๊พธ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ–ˆ์ง€๋งŒ parameter ๋ณ€์ˆ˜ a,b ๊ฐ’์ด ๋ฐ”๋€ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— main ํ•จ์ˆ˜์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

(2) call by address

#include <stdio.h>

void Pswap(int* pa, int* pb) {
	int temp = 0;
	temp = *pa;
	*pa = *pb;
	*pb = temp;
}

int main() {
	int a = 20;
	int b = 30;

	Pswap(&a, &b); // a์ฃผ์†Œ๊ฐ’, b์ฃผ์†Œ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์„ call by address๋ผ๊ณ  ํ•จ.
	printf("a = %d, b = %d\n", a, b);

	return 0;
}
์‹คํ–‰ํ™”๋ฉด
a = 30, b = 20

 * argument๋ฅผ 'ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๊ฐ’'์œผ๋กœ parameter์— ์ „๋‹ฌ

=> Pswap() ํ•จ์ˆ˜๋Š” parameter ๋ณ€์ˆ˜ &a,&b ๊ฐ’์ด ๋ฐ”๋€ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— main ํ•จ์ˆ˜์—๋„ ์˜ํ–ฅ์„ ์ค€๋‹ค.

profile

GiantStepDEV

@kongmi

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!