๋จผ์ , ๋ค์ ์ํฉ์ ๋ํด ์๊ธฐํด๋ณด์.
๊ฐ์ ์๋ก ๋ฐ๊พธ๋ ค๊ณ ์ค๊ณํด๋ณด์๋ค.
ใ กใ กใ กใ กใ ก
#include<stdio.h>
void swap(int a, int b) { // ์ฃผ์๋ฅผ ๋ฐ๋ ์๋ฃํ
int tmp = a;
a = b;
b = tmp;
}
void main() {
int a = 10, b = 20;
swap(a, b); // call by value(๊ฐ์ ์ํ ํธ์ถ)
printf("๊ตํํ: a=%d b=%d\n", a, b);
}
ใ กใ กใ กใ ก
#include<stdio.h>
void swap(int a, int b) { // ์ฃผ์๋ฅผ ๋ฐ๋ ์๋ฃํ
int tmp = a;
a = b;
b = tmp;
}
void main() {
int a = 10, b = 20;
swap(a, b); // call by value(๊ฐ์ ์ํ ํธ์ถ)
printf("๊ตํํ: a=%d b=%d\n", a, b);
}
#include<stdio.h>
void swap(int a, int b) { // ์ฃผ์๋ฅผ ๋ฐ๋ ์๋ฃํ
int tmp = a;
a = b;
b = tmp;
}
void main() {
int a = 10, b = 20;
swap(a, b); // call by value(๊ฐ์ ์ํ ํธ์ถ)
printf("๊ตํํ: a=%d b=%d\n", a, b);
}
ใ ก
์ ์์คํ ์ ๊ฒฐ๊ณผ๋
์ด์ฒ๋ผ ์๋ก ๊ตํ๋์ง๊ฐ ์๋๋ค.
์์ผ๊น?
๊ทธ์ด์ ๋ main()์์์ ๋ณ์์
swap()์์์ ๋ณ์๋ ์ด๋ฆ์ด ๊ฐ์ง๋ง ์๋ก ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
์ฆ, ๊ฐ์ ์ํ ํธ์ถ์ด๊ธฐ ๋๋ฌธ์
swap(a, b)๋ swap(10, 20)์ผ๋ก ํํ๋์ด์ง๋ค.
๋น๋ก swap()์์์ a, b์ ๊ฐ์ใด ์๋ก ๊ตํ๋์์์ง ๋ชฐ๋ผ๋
๊ทธ a์ b๊ฐ main()์ a, b ์ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์
main()์ ์ ์ฅ๋์ด์๋ 10๊ณผ 20์ด ๊ทธ๋๋ก ํํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์ด๋ป๊ฒ ํด์ผ ๊ฐ์ ์ ๋๋ก ๊ตํ์ถ๋ ฅํ ์ ์์๊น?
call by pointer(ํฌ์ธํฐ์ ์ํ ํธ์ถ) ์ ์ฌ์ฉํด์ผ ํ๋ค.
ํฌ์ธํฐ์ ์ํ ํธ์ถ:
main์์์ ๋ณ์์ ํจ์์์์ ๋ณ์๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ๊ธฐ๋ฅ์ ํ๋ค.
์๋์ฒ๋ผ ์์คํ ์ ๋ฐ๊ฟ๋ณด์๋ค.
ใ กใ กใ กใ กใ ก
#include<stdio.h>
void swap(int* a, int* b) { // ์ฃผ์๋ฅผ ๋ฐ๋ ์๋ฃํ / &๋ฅผ ๋ฐ๋๋ค.
int tmp = *a;
*a = *b;
*b = tmp;
}
void main() {
int a = 10, b = 20;
swap(&a, &b); // ์๋๋ call by value(๊ฐ์ ์ํ ํธ์ถ)์ด์ง๋ง &์ ํตํด -> call by pointer(ํฌ์ธํฐ์ ์ํ ํธ์ถ)
printf("๊ตํํ: a=%d b=%d\n", a, b);
}
ใ กใ กใ กใ กใ ก
#include<stdio.h>
void swap(int* a, int* b) { // ์ฃผ์๋ฅผ ๋ฐ๋ ์๋ฃํ / &๋ฅผ ๋ฐ๋๋ค.
int tmp = *a;
*a = *b;
*b = tmp;
}
void main() {
int a = 10, b = 20;
swap(&a, &b); // ์๋๋ call by value(๊ฐ์ ์ํ ํธ์ถ)์ด์ง๋ง &์ ํตํด -> call by pointer(ํฌ์ธํฐ์ ์ํ ํธ์ถ)
printf("๊ตํํ: a=%d b=%d\n", a, b);
}
์ ๋๋ก ๊ตํ ํ ์ถ๋ ฅ๋์์์ ์ ์ ์๋ค.
num๋ฅผ 1๋ก ๋ง๋๋ ์์คํ ์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ง๋ค์ด๋ณด์.
ใ กใ กใ กใ กใ ก
#include<stdio.h>
void f(int* num) {
*num = 1;
}
void main() {
int num = 100;
f(&num); // &num ์ ํตํด ํฌ์ธํฐ์ ์ํ ์ถ๋ ฅ.
printf("num=%d\n", num); // 1์ด ์ถ๋ ฅ๋ ์์๋๋ก,
}
#include<stdio.h>
void f(int* num) {
*num = 1;
}
void main() {
int num = 100;
f(&num); // &num ์ ํตํด ํฌ์ธํฐ์ ์ํ ์ถ๋ ฅ.
printf("num=%d\n", num); // 1์ด ์ถ๋ ฅ๋ ์์๋๋ก,
}
ใ กใ กใ กใ กใ ก
์ฌ๊ทํจ์
[์ฌ๊ทํจ์] == ์ํํธ์ถ
: ์๊ธฐ์์ ์ ์ํํ ๋์ ๋ณธ์ธ์ ํธ์ถํ๋ ํจ์
์๋๋ 4! (4ํฉํ ๋ฆฌ์ผ) ์ ๊ฐ์ด ์ผ๋ง์ธ์ง ์์๋ณด๋ ์์คํ ์ด๋ค.
ใ กใ กใ กใ กใ ก
#include<stdio.h>
int fac(int N) {
if (N == 1) {
return 1;
}
return N*fac(N - 1);
}
void main() {
printf("4!= %d\n", fac(4));
}
#include<stdio.h>
int fac(int N) {
if (N == 1) {
return 1;
}
return N*fac(N - 1);
}
void main() {
printf("4!= %d\n", fac(4));
}
ใ กใ กใ กใ กใ ก
ํ์ดํ ์์๋๋ก ์งํ๋๋ ์์คํ ์ด๋ค.
ใ กใ กใ กใ กใ ก
#include<stdio.h>
void show(int N) {
printf("%d ", N % 10);
if (N / 10 != 0) {
show(N / 10);
}
}
void show2(int N) {
if (N / 10 != 0) {
show2(N / 10);
}
printf("%d ", N % 10);
}
void main() {
show(1234); // ์ฌ๊ทํจ์
// 4 3 2 1
printf("\n\n");
show2(1234);
// 1 2 3 4
}
ใ กใ กใ กใ กใ ก
#include<stdio.h>
void show(int N) {
printf("%d ", N % 10);
if (N / 10 != 0) {
show(N / 10);
}
}
void show2(int N) {
if (N / 10 != 0) {
show2(N / 10);
}
printf("%d ", N % 10);
}
void main() {
show(1234); // ์ฌ๊ทํจ์
// 4 3 2 1
printf("\n\n");
show2(1234);
// 1 2 3 4
}
๋จผ์ , show() ํธ์ถ์ ์๋์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
4 3 2 1๋ก ์ถ๋ ฅ๋๋ ๊ณผ์ . (show)
๊ทธ ๋ค์, show2() ๊ฐ ํธ์ถ๋๋ ๊ณผ์ ์ ์๋์ ๊ฐ๋ค.
1 2 3 4 ๋ก ์ถ๋ ฅ๋๋ ๊ณผ์ .
// ์ ์ญ๋ณ์(global)
// : ํจ์์ ๋ฌด๊ดํ๊ฒ ์ ์ธ
// ๋ณ์์ ์๋ช
์ฃผ๊ธฐ๋ ํ๋ก๊ทธ๋จ์์ค๊ณผ ๋์ผ
// ์๋์ด๊ธฐํ
// ์ ์ ๋ณ์(static)
// : ์ง์ญ๋ณ์์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ์ ์ญ๋ณ์ ์์ค์ผ๋ก ๋ณ๊ฒฝ
// ์ง์ญ๋ณ์(local)
// : (์ง๊ธ๊น์ง ์ฃผ๋ก ์จ์จ ๊ฒ)
// ํจ์ ๋ด๋ถ์ ๊ตฌํ๋ ๋ณ์
// ๋ณ์์ ์๋ช
์ฃผ๊ธฐ๋ ํด๋น ํจ์์ ๋์ผ
ใ กใ กใ กใ กใ ก
// ๊ธฐ์ต์์ญ(์ ์ฅ๊ณต๊ฐ.Storage Class)
#include<stdio.h>
// ์ ์ญ๋ณ์(global)
// : ํจ์์ ๋ฌด๊ดํ๊ฒ ์ ์ธ
// ๋ณ์์ ์๋ช
์ฃผ๊ธฐ๋ ํ๋ก๊ทธ๋จ์์ค๊ณผ ๋์ผ
// ์๋์ด๊ธฐํ (์ฒ์๋ถํฐ 0์ด ์ ์ฅ๋๋ค.)
int arr[5];
void f() {
// ์ ์ ๋ณ์(static)
// : ์ง์ญ๋ณ์์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ์ ์ญ๋ณ์ ์์ค์ผ๋ก ๋ณ๊ฒฝ
int cnt1 = 0;
static int cnt2 = 0;
cnt1++;
cnt2++;
printf("cnt1= %d cnt2= %d\n", cnt1, cnt2);
}
void main() {
f(); f(); f();
printf("[ ");
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
printf("]\n");
}
ใ กใ กใ กใ กใ ก
// ๊ธฐ์ต์์ญ(์ ์ฅ๊ณต๊ฐ.Storage Class)
#include<stdio.h>
// ์ ์ญ๋ณ์(global)
// : ํจ์์ ๋ฌด๊ดํ๊ฒ ์ ์ธ
// ๋ณ์์ ์๋ช
์ฃผ๊ธฐ๋ ํ๋ก๊ทธ๋จ์์ค๊ณผ ๋์ผ
// ์๋์ด๊ธฐํ (์ฒ์๋ถํฐ 0์ด ์ ์ฅ๋๋ค.)
int arr[5];
void f() {
// ์ ์ ๋ณ์(static)
// : ์ง์ญ๋ณ์์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ์ ์ญ๋ณ์ ์์ค์ผ๋ก ๋ณ๊ฒฝ
int cnt1 = 0;
static int cnt2 = 0;
cnt1++;
cnt2++;
printf("cnt1= %d cnt2= %d\n", cnt1, cnt2);
}
void main() {
f(); f(); f();
printf("[ ");
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
printf("]\n");
}
ใ กใ กใ กใ กใ กใ กใ กใ กใ กใ กใ ก
cnt1= 1 cnt2= 1
cnt1= 1 cnt2= 2
cnt1= 1 cnt2= 3
[ 0 0 0 0 0 ]
๊ณ์ํ๋ ค๋ฉด ์๋ฌด ํค๋ ๋๋ฅด์ญ์์ค . . .
ใ กใ กใ กใ กใ กใ กใ กใ กใ กใ กใ ก
์ด๋ ๊ฒ ์ถ๋ ฅ๋ ์ด์ ๊ฐ ๋ฌด์์ผ๊น??
1.
๋จผ์ , cnt๊ฐ์ด ๊ณ์ ์ ์ง๋์ด ์ฆ๊ฐํ๊ฒ์,
cnt ์์ static์ ๋ถ์ฌ ์ ์ ๋ณ์(static)ํ ์์ผฐ๊ธฐ ๋๋ฌธ์
์์คํ ์ด ๋๋ ๋๊น์ง cnt์ ์๋ช ์ฃผ๊ธฐ๊ฐ ๋์ด๋์
main() ์์ f()๋ฅผ ์ธ๋ฒ ํธ์ถํ๋ ๋์ ๊ทธ ๊ฐ์ด ์ ์ง๋ ๊ฒ์ด๋ค.
2.
[ 0 0 0 0 0 ]
๋ผ๊ณ ์ถ๋ ฅ๋ ์ด์ ๋ ๋ฌด์์ผ๊น?
f()๊ณผ main() ๋๋ค ๋ฌด๊ดํ๊ฒ
int arr[5]; ๋ผ๊ณ ์์ฑํ์ฌ arr[5]๋ฅผ ์ ์ญ๋ณ์(global)ํ ์์ผฐ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋, ๊ฐ์ ์ ๋ ฅํ์ง ์์๋๋ฐ๋ 0์ด๋ผ ์ถ๋ ฅ๋ ๊ฒ์
์๋์ด๊ธฐํ ๋๋ฌธ์ด๋ค.
ใ กใ กใ กใ กใ ก
#include<stdio.h>
void f1(int a, int b) {
static int cnt = 0; // ์ ์ ๋ณ์ cnt์ 0์ ์ฅ.
cnt++; // cnt์ 1์ถ๊ฐ.
printf("%d์ด๊ณ , +๋ฅผ ์ด %dํ ํธ์ถํ์
จ์ต๋๋ค.\n", a + b, cnt);
}
void f2(int a, int b) {
static int cnt = 0; //์ ์ ๋ณ์ cnt์ 0์ ์ฅ.
cnt++; // cnt์ 1์ถ๊ฐ.
printf("%d์ด๊ณ , -๋ฅผ ์ด %dํ ํธ์ถํ์
จ์ต๋๋ค.\n", a - b, cnt);
}
void main() {
int n1, n2;
char op;
for (int i = 0; i < 5; i++) { // 5๋ฒ ์ ์2๊ฐ์ ์ฐ์ฐ์ 1๊ฐ ๋ฅผ ์
๋ ฅ๋ฐ๋๋ค.
printf("์ ์2๊ฐ,์ฐ์ฐ์1๊ฐ: ");
scanf("%d%d %c", &n1, &n2, &op);
if (op == '+') { // ์กฐ๊ฑด๋ฌธ: op๊ฐ '+' ์ธ๊ฐ?
f1(n1,n2);
}
else if (op == '-') { // ์กฐ๊ฑด๋ฌธ: op๊ฐ '-' ์ธ๊ฐ?
f2(n1, n2);
}
else {
printf("์๋ชป๋ ์ฐ์ฐ์๋ฅผ ์
๋ ฅํ์
จ์ต๋๋ค!\n");
}
}
}
ใ กใ กใ กใ กใ ก
#include<stdio.h>
void f1(int a, int b) {
static int cnt = 0; // ์ ์ ๋ณ์ cnt์ 0์ ์ฅ.
cnt++; // cnt์ 1์ถ๊ฐ.
printf("%d์ด๊ณ , +๋ฅผ ์ด %dํ ํธ์ถํ์
จ์ต๋๋ค.\n", a + b, cnt);
}
void f2(int a, int b) {
static int cnt = 0; //์ ์ ๋ณ์ cnt์ 0์ ์ฅ.
cnt++; // cnt์ 1์ถ๊ฐ.
printf("%d์ด๊ณ , -๋ฅผ ์ด %dํ ํธ์ถํ์
จ์ต๋๋ค.\n", a - b, cnt);
}
void main() {
int n1, n2;
char op;
for (int i = 0; i < 5; i++) { // 5๋ฒ ์ ์2๊ฐ์ ์ฐ์ฐ์ 1๊ฐ ๋ฅผ ์
๋ ฅ๋ฐ๋๋ค.
printf("์ ์2๊ฐ,์ฐ์ฐ์1๊ฐ: ");
scanf("%d%d %c", &n1, &n2, &op);
if (op == '+') { // ์กฐ๊ฑด๋ฌธ: op๊ฐ '+' ์ธ๊ฐ?
f1(n1,n2);
}
else if (op == '-') { // ์กฐ๊ฑด๋ฌธ: op๊ฐ '-' ์ธ๊ฐ?
f2(n1, n2);
}
else {
printf("์๋ชป๋ ์ฐ์ฐ์๋ฅผ ์
๋ ฅํ์
จ์ต๋๋ค!\n");
}
}
}
ใ กใ กใ กใ กใ ก
#include<stdio.h>
int MAX; //์ ์ญ๋ณ์ MAX ์์ฑ, ์๋์ด๊ธฐํ.
void check(int num) {
if (MAX < num) { // ์กฐ๊ฑด๋ฌธ: num์ด MAX ์ด๊ณผ์ธ๊ฐ?
MAX = num; // MAX๋ฅผ num์ ๊ฐ์ผ๋ก ๊ต์ฒด.
}
}
void main() {
while (1) { // ๋ฌดํ๋ฃจํ ์์ฑ.
int num;
printf("์ ์์
๋ ฅ: ");
scanf("%d", &num);
if (num <= 0) { // ์กฐ๊ฑด๋ฌธ: num์ด ์ดํ์ธ๊ฐ?
break; // ์ฆ์while๋ฌธ ํ์ถ.
}
check(num);
}
printf("MAX= %d\n", MAX); // MAX๊ฐ ์ถ๋ ฅ.
}
ใ กใ กใ กใ กใ ก
#include<stdio.h>
int MAX; //์ ์ญ๋ณ์ MAX ์์ฑ, ์๋์ด๊ธฐํ.
void check(int num) {
if (MAX < num) { // ์กฐ๊ฑด๋ฌธ: num์ด MAX ์ด๊ณผ์ธ๊ฐ?
MAX = num; // MAX๋ฅผ num์ ๊ฐ์ผ๋ก ๊ต์ฒด.
}
}
void main() {
while (1) { // ๋ฌดํ๋ฃจํ ์์ฑ.
int num;
printf("์ ์์
๋ ฅ: ");
scanf("%d", &num);
if (num <= 0) { // ์กฐ๊ฑด๋ฌธ: num์ด ์ดํ์ธ๊ฐ?
break; // ์ฆ์while๋ฌธ ํ์ถ.
}
check(num);
}
printf("MAX= %d\n", MAX); // MAX๊ฐ ์ถ๋ ฅ.
}
๋.
๋๊ธ