ν‹°μŠ€ν† λ¦¬ λ·°

πŸͺ» λ§€κ°œλ³€μˆ˜ μ‚¬μ΄μ˜ 자료 전달

 

🌼 λ§€κ°œλ³€μˆ˜ μ‚¬μ΄μ˜ μžλ£Œμ „λ‹¬ 방법


⁕ 값에 μ˜ν•œ μžλ£Œμ „λ‹¬ (call by value)

• 기본적인 μžλ£Œμ „λ‹¬ 방법
• μ‹€ λ§€κ°œλ³€μˆ˜μ™€ ν˜•μ‹ λ§€κ°œλ³€μˆ˜ μ‚¬μ΄μ˜ κ°’μ˜ 전달
• ν˜ΈμΆœν•œ ν•¨μˆ˜μ˜ 싀행이 λλ‚œ λ‹€μŒ 전달받은 값을 되돌렀 λ°›μ§€λŠ” λͺ»ν•œλ‹€.

fcn1(10, 20);	// ν•¨μˆ˜ 호좜 (μ‹€ λ§€κ°œλ³€μˆ˜)

// 자료 전달 (κ°’ 전달)

int fcn1(int x, int y)	// ν•¨μˆ˜ μ •μ˜ (ν˜•μ‹ λ§€κ°œλ³€μˆ˜)


⁕ 값에 μ˜ν•œ μžλ£Œμ „λ‹¬ 예

#include <stdio.h>

void swap(int x, int y);

void main(){
	int a = 3, b = 5;
    printf("호좜 μ „ a = %d, b = %d\n", a, b);
    swap(a, b);
    printf("호좜 ν›„ a = %d, b = %d\n", a, b);
}

void swap(int x, int y){
	int temp;
    temp = x;
    x = y;
    y = temp;
    printf("ν•¨μˆ˜ λ‚΄ x = %d, y = %d\n", x, y);
}

/* < κ²°κ³Ό >
호좜 μ „ a = 3, b = 5
ν•¨μˆ˜ λ‚΄ x = 5, y = 3
호좜 ν›„ a = 3, b = 5 ⇨ ν”Όν˜ΈμΆœ ν•¨μˆ˜ λ‚΄μ—μ„œ ν˜•μ‹ λ§€κ°œλ³€μˆ˜ 값이 λ°”λ€Œμ—ˆμœΌλ‚˜, μ‹€ λ§€κ°œλ³€μˆ˜ 값은 변함 μ—†μŒ
/*


⁕ 값에 μ˜ν•œ μžλ£Œμ „λ‹¬ κ³Όμ •

 


⁕ 참쑰에 μ˜ν•œ μžλ£Œμ „λ‹¬ (call by reference)

• ν˜ΈμΆœν•¨μˆ˜μ™€ ν”Ό ν˜ΈμΆœν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜ 값을 μ„œλ‘œ κ΅ν™˜ν•  수 μžˆλŠ” 자료 전달 방법
• 값을 μ „λ‹¬ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ‹€ λ§€κ°œλ³€μˆ˜μ˜ 값이 λ“€μ–΄μžˆλŠ” μ£Όμ†Œ 값이 μ „λ‹¬λœλ‹€.

fcn1(&a, &b);	// ν•¨μˆ˜ 호좜 (μ‹€ λ§€κ°œλ³€μˆ˜)

/*
	자료 전달 (μ£Όμ†Œκ°’ 전달)
    & : μ£Όμ†Œ μ—°μ‚°μž, * : λ‚΄μš© μ—°μ‚°μž
    ex) *x : μ£Όμ†Œ(x)의 λ‚΄μš©(*)
*/

int fcn1(int *x, int *y)	// ν•¨μˆ˜ μ •μ˜ (ν˜•μ‹ λ§€κ°œλ³€μˆ˜)
// *x : a의 μ£Όμ†Œ, *y : b의 μ£Όμ†Œ 전달


⁕ 참쑰에 μ˜ν•œ μžλ£Œμ „λ‹¬ 예

#include <stdio.h>

void swap(int x, int y);

void main(){
	int a = 3, b = 5;
    printf("호좜 μ „ a = %d, b = %d\n", a, b);
    // μ£Όμ†Œκ°’ 전달 μœ„ν•΄ μ‹€ λ§€κ°œλ³€μˆ˜ μ•žμ— μ£Όμ†Œ μ—°μ‚°μž& λΆ™μž„
    swap(&a, &b);
    printf("호좜 ν›„ a = %d, b = %d\n", a, b);
}

// μ£Όμ†Œκ°’ 전달 λ°›κΈ° μœ„ν•΄ 포인터 λ³€μˆ˜ int *x, int *y μ„ μ–Έ
void swap(int *x, int *y){
	int temp;
    temp = *x;
    *x = *y;		// 두 λ³€μˆ˜ a, b의 μ£Όμ†Œμ˜ λ‚΄μš© μ„œλ‘œ λ°”κΏˆ
    *y = temp;
    printf("ν•¨μˆ˜ λ‚΄ x = %d, y = %d\n", x, y);
}

/* < κ²°κ³Ό >
호좜 μ „ a = 3, b = 5
ν•¨μˆ˜ λ‚΄ x = 5, y = 3
호좜 ν›„ a = 5, b = 3
⇨ 참쑰에 μ˜ν•œ 자료 전달 방법은 ν”Όν˜ΈμΆœ ν•¨μˆ˜ λ‚΄ κ°’μ˜ λ³€ν™”κ°€ μΌμ–΄λ‚˜λ©΄ μ‹€ λ§€κ°œλ³€μˆ˜μ˜ 값도 변화됨
/*


⁕ μ°Έμ‘°μ— μ˜ν•œ μžλ£Œμ „λ‹¬ κ³Όμ •

 


πŸͺ» κΈ°μ–΅ν΄λž˜μŠ€ (storage class)


βœ“ λ³€μˆ˜λ₯Ό κΈ°μ–΅ κ³΅κ°„μ˜ νŠΉμ • μ˜μ—­μ— ν• λ‹Ήν•˜λŠ” 방법

βœ“ 즉, 각 λ³€μˆ˜μ˜ 유효 λ²”μœ„μ™€ 쑴속 기간을 μ„€μ •

• λ³€μˆ˜μ˜ μ‚¬μš© μœ„μΉ˜μ— 따라

- μ§€μ—­λ³€μˆ˜
- μ „μ—­λ³€μˆ˜

• λ³€μˆ˜μ˜ 쑴속 기간에 따라

- μžλ™λ³€μˆ˜
- μ •μ λ³€μˆ˜
- μ™ΈλΆ€λ³€μˆ˜
- λ ˆμ§€μŠ€ν„°λ³€μˆ˜


🌼 μ§€μ—­λ³€μˆ˜μ™€ μ „μ—­λ³€μˆ˜


⁕ μ§€μ—­λ³€μˆ˜ (local variable)

• νŠΉμ • λ²”μœ„ λ‚΄μ—μ„œ ν†΅μš©λ˜λŠ” λ³€μˆ˜
• μ„ μ–Έλœ λΈ”λ‘μ΄λ‚˜ ν•¨μˆ˜ λ‚΄μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯
• ν•¨μˆ˜μ—μ„œ μ‚¬μš©λ˜λŠ” 맀개 λ³€μˆ˜λ„ ν•΄λ‹Ή

⁕ μ „μ—­λ³€μˆ˜ (global variable)

ν”„λ‘œκ·Έλž¨ 전체에 걸쳐 μ‚¬μš©λ  수 μžˆλŠ” λ³€μˆ˜
(ν•¨μˆ˜ λ°–μ΄λ‚˜ μ™ΈλΆ€ νŒŒμΌμ—μ„œ 선언됨)
• μ΄ˆκΈ°ν™” μ•ˆ ν•˜λ©΄ 0으둜 μžλ™ μ΄ˆκΈ°ν™”

 

⁕ μ§€μ—­λ³€μˆ˜μ™€ μ „μ—­λ³€μˆ˜μ˜ μœ νš¨λ²”μœ„

 

⁕ μ§€μ—­λ³€μˆ˜μ˜ μ‚¬μš© 예 1

 

⁕ μ§€μ—­λ³€μˆ˜μ˜ μ‚¬μš© 예 2

⇨ λ§ˆμ§€λ§‰ printf()μ—μ„œ yλŠ” μ „μ—­λ³€μˆ˜μ΄κΈ° λ•Œλ¬Έμ— y++κ°€ 적용된 κ°’μœΌλ‘œ 좜λ ₯됨

 

⁕ μ „μ—­λ³€μˆ˜μ˜ μ‚¬μš© 예

 

⁕ μ „μ—­λ³€μˆ˜μ™€ μ§€μ—­λ³€μˆ˜μ˜ 비ꡐ

• 동일 λ²”μœ„ λ‚΄μ—μ„œλŠ” μ§€μ—­λ³€μˆ˜κ°€ μš°μ„ 
• μ „μ—­λ³€μˆ˜ 선언은 ν”„λ‘œκ·Έλž¨ 선두에 μœ„μΉ˜
• 가급적 μ§€μ—­λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 효율적
≫ ν•¨μˆ˜μ˜ 독립성 ν–₯상 / 디버깅 효율 ν–₯상 / κΈ°μ–΅ 곡간 μ ˆμ•½


🌼 λ³€μˆ˜μ˜ κΈ°μ–΅ν΄λž˜μŠ€ μ’…λ₯˜

 

⇨ μžλ™ λ³€μˆ˜ autoλ₯Ό μ œμ™Έν•œ λ‚˜λ¨Έμ§€λŠ” μƒλž΅ λΆˆκ°€


⁕ μžλ™λ³€μˆ˜

• ν•¨μˆ˜ μ‹€ν–‰μ‹œ 생성, μ‹€ν–‰ λλ‚˜λ©΄ 기얡곡간 제거
• μ˜ˆμ•½μ–΄ auto μ‚¬μš© (μƒλž΅ κ°€λŠ₯)
• ν†΅μš© λ²”μœ„λŠ” λ³€μˆ˜κ°€ μ„ μ–Έλœ λΈ”λŸ­, ν•¨μˆ˜ λ‚΄λ‘œ ν•œμ •
• μ§€μ—­λ³€μˆ˜μ— ν•΄λ‹Ή
• μ΄ˆκΈ°ν™” ν•„μš”

⁕ μžλ™ λ³€μˆ˜μ˜ μ‚¬μš© 예

 

⁕ μ •μ λ³€μˆ˜

κΈ°μ–΅μ˜μ—­ ν”„λ‘œκ·Έλž¨ 끝날 λ•ŒκΉŒμ§€ μœ μ§€
μ˜ˆμ•½μ–΄ static을 μ‚¬μš©
μ „μ—­ λ³€μˆ˜μ— ν•΄λ‹Ή
λ³€μˆ˜μ˜ 값은 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 계속 μœ μ§€
μ΄ˆκΈ°ν™”κ°€ μ—†μœΌλ©΄ 0으둜 μ΄ˆκΈ°ν™” 

⁕ 정적 λ³€μˆ˜μ˜ μ‚¬μš© 예 1


⁕ 정적 λ³€μˆ˜μ˜ μ‚¬μš© 예 2

⇨ μ •μ λ³€μˆ˜ sλŠ” main() μ•ˆμ˜ while문이 돌 λ•Œλ§ˆλ‹€ 값이 λ°”λ€Œμ§€λ§Œ,
μžλ™ λ³€μˆ˜μΈ aλŠ” while문이 돌 λ•Œλ§ˆλ‹€ 값이 μ΄ˆκΈ°ν™” 됨

βœ“ μžλ™ λ³€μˆ˜λŠ” 호좜될 λ•Œλ§ˆλ‹€ 값이 μ΄ˆκΈ°ν™” λ˜μ§€λ§Œ,
ν•¨μˆ˜ λ‚΄μ—μ„œ μ‚¬μš©λœ 정적 λ³€μˆ˜λŠ” ν•¨μˆ˜λ₯Ό λΉ μ Έλ‚˜κ°€λ„ κ·Έ 값을 μœ μ§€ (ν•œ 번만 μ΄ˆκΈ°ν™” 됨)

 

⁕ μ™ΈλΆ€λ³€μˆ˜

• ν•¨μˆ˜μ˜ μ™ΈλΆ€μ—μ„œ μ„ μ–Έ
• μ˜ˆμ•½μ–΄ extern μ‚¬μš©
• μ „μ—­ λ³€μˆ˜μ— ν•΄λ‹Ή
• μ΄ˆκΈ°ν™”κ°€ μ—†μœΌλ©΄ 0으둜 μ΄ˆκΈ°ν™” 됨
• λ‹€λ₯Έ νŒŒμΌμ—μ„œ μ™ΈλΆ€ λ³€μˆ˜λ‘œ μ„ μ–Έλœ λ³€μˆ˜ 값을 μ°Έμ‘°ν•  수 μžˆλ‹€

⁕ μ™ΈλΆ€ λ³€μˆ˜μ˜ μ‚¬μš© 예 1


⁕ μ™ΈλΆ€ λ³€μˆ˜μ˜ μ‚¬μš© 예 2

⇨ λ˜λ‹€λ₯Έ λ…λ¦½λœ νŒŒμΌμ—μ„œ μ™ΈλΆ€λ³€μˆ˜λ₯Ό μ„ μ–Έν•¨μœΌλ‘œμ¨ 값을 κ°€μ Έλ‹€ μ‚¬μš©ν•  수 있음

 

⁕ λ ˆμ§€μŠ€ν„°λ³€μˆ˜

CPU λ‚΄ λ ˆμ§€μŠ€ν„°μ— 자료 μ €μž₯ν•˜κ³ μž ν•  λ•Œ
μ˜ˆμ•½μ–΄ register μ‚¬μš©
μžλ™ λ³€μˆ˜μ™€ λ™μΌν•œ 속성
ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 속도 증가λ₯Ό λͺ©μ μœΌλ‘œ μ‚¬μš©
(주둜 λ°˜λ³΅λ¬Έμ—μ„œ μΉ΄μš΄ν„° λ³€μˆ˜λ‘œ μ‚¬μš©)

⁕ μ™ΈλΆ€ λ³€μˆ˜μ˜ μ‚¬μš© 예 1

 

λŒ“κΈ€
곡지사항
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€
Total
Today
Yesterday
링크
TAG more
Β«   2025/05   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
κΈ€ 보관함