๐ฉ๐ป Language/C, C++
3๊ฐ. [์ฃผ๋ง์ ๋ฐฐ์ฐ๋ C/C++] C์ธ์ด - ํจ์์ ํฌ์ธํฐ
kongmi
2023. 1. 14. 18:48
ํจ์
์ฝ๋๋ฅผ ์์ฑํ ๋ ๋ฐ๋ณต๋๋ ๋ช ๋ น์ด๋ฅผ ํ๋์ ๋จ์๋ก ๋ฌถ์ด์ฃผ๋ ๊ธฐ๋ฅ
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์ธ์ด ํจ์ ํธ์ถ ๋ฐฉ๋ฒ
- call by value : ๊ฐ์ ์ํ ํธ์ถ
- 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 ํจ์์๋ ์ํฅ์ ์ค๋ค.