1580, 1/79 회원가입  로그인  
   해킹잘하고싶다
   http://없음
   Call by value VS Call by Reference

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=8565 [복사]


※어셈블리어의 관점에서 바라보면 글이 너무 길어지니 C언어의 관점에서 바라보겠습니다.

직역하자면 값에 의한 호출과 참조에 의한 호출이라고 해석할 수 있다.
일단 두개의 소스를 보여주겠다.




=================================
// Call by vaule

#include <stdio.h>

void swap(int x, int y)
{
    int temp;
    
    temp = x;
    x = y;
    y = temp;
}

int main(void)
{
    int a = 10;
    int b = 20;

    swap(a, b);

    printf("a : %d, b : %d\n", a, b);
    return 0;
}
=================================

위 소스의 같은 경우 main함수 내에서 int형 변수 a와 b를 swap함수의 인자로 넘겼다.
핵심만 요약해서 말하자면 main함수 변수를 swap함수에 넘긴다 하더라도
main함수 내부의 인자와 swap함수의 매개변수는 완전히 별개라고 생각해도 무방하다.
그래서 위 소스를 출력하면 a : 10, b : 20이라고 결과가 나온다.
그렇다면 main함수 내부의 변수 a와 b를
swap함수 내부에서 변경시킬려면 어떻게 해야 할까?
여기서 필요한 개념이 바로 Call by reference이다!

















=================================
// Call by reference

#include <stdio.h>

void swap(int *pA, int *pB)
{
    int temp;
    
    temp = *pA;
    *pA = *pB;
    *pB = temp;
}

int main(void)
{
    int a = 10;
    int b = 20;

    swap(&a, &b);

    printf("a : %d, b : %d\n", a, b);
    return 0;
}
===============================

뭔가 다르게 보이는가?
포인터의 개념을 안 다면 이해하는 것이 쉽다.

main함수 내부의 swap함수의 전달값으로 왜 a, b라고 안 하고 &a, &b라 했을까?
&(앰퍼센트)연산자는 주소를 의미한다.
swap함수 내부를 보면 *(에스터리스크)연산자를 사용하는데
*는 포인터의 개념 연산자로 *a라고 하면
a가 가리키는 변수를 의미하게 된다.
즉, swap함수의 매개변수와 main함수의 변수가 서로 "연결"이 되어서
a와 b의 값이 변경이 된다는 게 Call by reference의 개념이다.
(필자가 쓴 이 글을 이해하려면 포인터를 이해하고 있어야한다.)

  Hit : 72     Date : 2023/01/15 02:35



    
     [공지] 강좌를 올리실 때는 말머리를 달아주세요^ㅡ^ [29] 멍멍 02/27 17656
1579   쉘코드 모음     해킹잘하고싶다
01/15 154
  Call by value VS Call by Reference     해킹잘하고싶다
01/15 71
1577   (꼼수) L.O.B 한방에 클리어하기[1]     해킹잘하고싶다
01/14 110
1576   towelroot.c (zip) 코멘팅.[2]     scube
08/18 2759
1575   levitator.c (안드로이드 루팅) 공격 분석 소스 코드 공유.[4]     scube
08/17 2787
1574   무료 정보보안 기술인재 양성 과정 교육생 모집     chanjung111
06/17 3478
1573   K-Shield 주니어 5기 모집     lrtk
06/17 3209
1572   [팁] 파이썬 2소스를 3으로 변경해주는 사이트[3]     한승재
05/13 2998
1571   구글 백링크 작업 질문요     wkatnxka
03/30 2602
1570   [팁] 우분투 미러링서버     한승재
03/09 2985
1569 비밀글입니다  감을못잡겠네요ㅜㅜ     잉잉잉
01/15 2
1568   데비안 계열 리눅스 의존성 깨졌을때 해결법     한승재
11/27 3313
1567   홍보합니다. 신생 보안커뮤니티입니다.     kimwoojin0952
10/26 3472
1566   신기한 프로그래밍 언어[3]     koreal33t
09/06 3797
1565   윈도우,리눅스에서 내 ip를 확인해 보자 [1]     koreal33t
09/06 3066
1564   CTF 사이트[1]     koreal33t
09/06 3556
1563   자격증 (문제)사이트 [2]     koreal33t
09/06 3452
1562   [퍼온글]리눅스 기본 명령어     한승재
06/06 4047
1561   [동강][퍼온글]C언어로 Hellow world를 출력해보자![2]     한승재
05/23 3643
1 [2][3][4][5][6][7][8][9][10]..[79]

Copyright 1999-2023 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com