Upgrade to Pro — share decks privately, control downloads, hide ads and more …

매개변수 전달 방식

매개변수 전달 방식

프로그래밍 언어론 - 매개변수 전달 방식

Avatar for CHELSEA

CHELSEA

June 17, 2020

More Decks by CHELSEA

Other Decks in Programming

Transcript

  1. #INTRO ੋࣻ vs ݒѐ߸ࣻ ೣࣻ, ೐۽द੷ ഐ୹ী ز߈ ೣࣻ, ೐۽द੷

    ࢶ঱ী աఋթ ੋࣻ(argument) पݒѐ߸ࣻ(actual parameter) ݒѐ߸ࣻ(parameter) ഋधݒѐ߸ࣻ(formal parameter) C, Java Algol, Pascal C, Java Algol, Pascal
  2. #ݒѐ߸ࣻ_੹׳_ߑध 1 2 3 4 5 ч ੹׳ ߑध pass-by-value

    ઱ࣗ ੹׳ ߑध pass-by-reference ч-Ѿҗ ੹׳ ߑध pass-by-value-result Ѿҗ ੹׳ ߑध pass-by-result ੉ܴ ੹׳ ߑध pass-by-name
  3. #ݒѐ߸ࣻ_੹׳_ߑध 1 ч ੹׳ ߑध pass-by-value ੋࣻ੄ чਸ ഐ୹ दрী

    ҅࢑ೞҊ ೧׼ ݒѐ߸ࣻী ࠂࢎ पઁ ੋࣻী ৔ೱਸ ޷஖૑ ঋח׮
  4. #ݒѐ߸ࣻ_੹׳_ߑध ੋࣻ੄ ݫݽܻ ઱ࣗܳ ೧׼ ݒѐ߸ࣻী ࠂࢎ, ݒѐ߸ࣻח पઁ ੋࣻী

    ؀ೠ р੽੸ੋ ଵઑ ೣࣻ प೯ ઺ী ੌযաח ݒѐ߸ࣻী ؀ೠ ੷੢ޙ਷ ૒੽੸ਵ۽ ੋࣻ чী ৔ೱਸ ષ 2 ઱ࣗ ੹׳ ߑध pass-by-reference
  5. #ݒѐ߸ࣻ_੹׳_ߑध & WHEN? ೣࣻ प೯ زউ ੋࣻ ч੉ ߸೧ঠ ೞח

    ҃਋ ؀ഋ ߓৌ୊ۢ ݫݽܻ ݆੉ ର૑ೞח ҃਋ী ਬਊ 2 ઱ࣗ ੹׳ ߑध pass-by-reference
  6. #ݒѐ߸ࣻ_੹׳_ߑध & WHY NOT? ੋࣻ ࠄې чী ؀ೠ ࠗ੘ਊਸ ഐ୹੗о

    ਗೞ૑ ঋਸ ࣻب… 2 ઱ࣗ ੹׳ ߑध pass-by-reference
  7. #ݒѐ߸ࣻ_੹׳_ߑध ೣࣻ ഐ୹ द ੋࣻ੄ чਸ ݒѐ߸ࣻ۽ ࠂࢎ, ೣࣻ ܻఢ

    द ҅࢑ Ѿҗܳ ੋࣻ۽ ࠂࢎ 3 ч-Ѿҗ ੹׳ ߑध pass-by-value-result 4 Ѿҗ ੹׳ ߑध pass-by-result ч-Ѿҗ ੹׳ Ѿҗ ੹׳ ೣࣻ प೯੉ ՘աҊ ܻఢೡ ٸ ݒѐ߸ࣻীࢲ ҅࢑ೠ ୭ઙчਸ ੋࣻ۽ ࠂࢎ
  8. #ݒѐ߸ࣻ_੹׳_ߑध ೣࣻ ഐ୹ द ੋࣻ੄ чਸ ݒѐ߸ࣻ۽ ࠂࢎ, ೣࣻ ܻఢ

    द ҅࢑ Ѿҗܳ ੋࣻ۽ ࠂࢎ 3 ч-Ѿҗ ੹׳ ߑध pass-by-value-result 4 Ѿҗ ੹׳ ߑध pass-by-result ч-Ѿҗ ੹׳ Ѿҗ ੹׳ ೣࣻ प೯੉ ՘աҊ ܻఢೡ ٸ ݒѐ߸ࣻীࢲ ҅࢑ೠ ୭ઙчਸ ੋࣻ۽ ࠂࢎ ޖट ର੉о ੓ਸө?
  9. #ݒѐ߸ࣻ_੹׳_ߑध 3 ч-Ѿҗ ੹׳ ߑध pass-by-value-result 4 Ѿҗ ੹׳ ߑध

    pass-by-result ч-Ѿҗ ੹׳ Ѿҗ ੹׳ ߹ݺ ࠢ੉ӝ(aliasing)੄ ର੉! ೣࣻ, ೐۽द੷ উীࢲ زੌೠ ݫݽܻ ਤ஖ܳ
 ׮ܲ ੉ܴਵ۽ ଵઑೡ ࣻ ੓ѱ ೞח Ѫ
  10. #ݒѐ߸ࣻ_੹׳_ߑध 3 ч-Ѿҗ ੹׳ ߑध pass-by-value-result 4 Ѿҗ ੹׳ ߑध

    pass-by-result ч-Ѿҗ ੹׳ Ѿҗ ੹׳ ߹ݺ ࠢ੉ӝ(aliasing)੄ ର੉! ೣࣻ, ೐۽द੷ উীࢲ زੌೠ ݫݽܻ ਤ஖ܳ
 ׮ܲ ੉ܴਵ۽ ଵઑೡ ࣻ ੓ѱ ೞח Ѫ ߹ݺ ࠢ੉ӝ O ߹ݺ ࠢ੉ӝ X
  11. #ݒѐ߸ࣻ_੹׳_ߑध & Example زੌೠ ݫݽܻ ਤ஖ܳ ف ѐ ੉࢚੄ ઱ࣗо

    оܻఃѱ ೞח Ѫ ੹৉ ߸ࣻܳ ઱ࣗ ੹׳ ߑधਵ۽ ੹׳ೞҊ, э਷ ೣࣻ ղীࢲ ੉ ߸ࣻܳ ੹৉ ߸ࣻ۽ࢲ ଵઑ 3 ч-Ѿҗ ੹׳ ߑध pass-by-value-result 4 Ѿҗ ੹׳ ߑध pass-by-result
  12. #ݒѐ߸ࣻ_੹׳_ߑध C++ 3 ч-Ѿҗ ੹׳ ߑध pass-by-value-result 4 Ѿҗ ੹׳

    ߑध pass-by-result Ada pass-by-value-result pass-by-reference void f(int& x, int& y) { x = x + 1; y = y + 1; } procedure f(x, y: in out Integer) is begin x := x + 1; y := y + 1; end f;
  13. #ݒѐ߸ࣻ_੹׳_ߑध C++ 3 ч-Ѿҗ ੹׳ ߑध pass-by-value-result 4 Ѿҗ ੹׳

    ߑध pass-by-result Ada pass-by-value-result pass-by-reference void f(int& x, int& y) { x = x + 1; y = y + 1; } procedure f(x, y: in out Integer) is begin x := x + 1; y := y + 1; end f; f(a, b) a, b 1ঀ ૐо a, b 1ঀ ૐо
  14. #ݒѐ߸ࣻ_੹׳_ߑध C++ 3 ч-Ѿҗ ੹׳ ߑध pass-by-value-result 4 Ѿҗ ੹׳

    ߑध pass-by-result Ada pass-by-value-result pass-by-reference void f(int& x, int& y) { x = x + 1; y = y + 1; } procedure f(x, y: in out Integer) is begin x := x + 1; y := y + 1; end f; f(a, a) aо 2݅ఀ ૐо aо 1݅ఀ ૐо
  15. #ݒѐ߸ࣻ_੹׳_ߑध C++ 3 ч-Ѿҗ ੹׳ ߑध pass-by-value-result 4 Ѿҗ ੹׳

    ߑध pass-by-result Ada pass-by-value-result pass-by-reference void f(int& x, int& y) { x = x + 1; y = y + 1; } procedure f(x, y: in out Integer) is begin x := x + 1; y := y + 1; end f; f(a, a) aо 2݅ఀ ૐо aо 1݅ఀ ૐо ੉۠ ޙઁח ಴ળ ঱যীࢲ ߓઁೞب۾ غয ੓׮
  16. #ݒѐ߸ࣻ_੹׳_ߑध 5 ੉ܴ ੹׳ ߑध pass-by-name Algol60 ীࢲ ݢ੷ Ҋউ೮ਵա,

    ৈ۞ ৘ஏೞ૑ ޅೠ Ѿҗо ੓঻׮. ৮੹൤ ੌ߈੸ੋ Үജ ೐۽द੷ ੘ࢿ ࠛо!
  17. #ݒѐ߸ࣻ_੹׳_ߑध 5 ੉ܴ ੹׳ ߑध pass-by-name procedure swap(a, b); integer

    a, b; begin integer t; t := a; a := b; b := t; end; Algol60 swap(a[i], i) swap(i, a[i]) a := b;ীࢲ i੄ ч੉ ߄Շয ߡܽ׮!