1581, 76/80 회원가입  로그인  
   해킹잘하고싶다
   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 : 776     Date : 2023/01/15 02:35



    
81   levitator.c (안드로이드 루팅) 공격 분석 소스 코드 공유.[4]     scube
08/17 3525
80   안녕하세요.     god0631a
03/16 3430
79   구글 백링크 작업 질문요     wkatnxka
03/30 3218
78   쉘코드 모음     해킹잘하고싶다
01/15 1376
77   (꼼수) L.O.B 한방에 클리어하기[1]     해킹잘하고싶다
01/14 1066
  Call by value VS Call by Reference     해킹잘하고싶다
01/15 775
75   리눅스 커널 2.6 버전 이후의 LKM     jdo
07/25 561
74   고수님들의 도움을 받고 싶습니다     vbnm111
02/11 39
73 비밀글입니다  감을못잡겠네요ㅜㅜ     잉잉잉
01/15 3
72 비밀글입니다  2.3 모니터에 데이터 출력하기 printf()      xownsdk2
08/20 2
71 비밀글입니다  해커스쿨 관리자님께     packer
03/20 2
70 비밀글입니다  질문합니다~     마누라
08/05 1
69 비밀글입니다  [re] : 해쿨 광주에서 같이 겅부하실분 선생님 & 스승 구합니다.     ne4760
03/25 1
68   비밀글입니다  [re] c++ 강좌     sinslove
02/22 0
67   비밀글입니다  [re] c++ 강좌     sinslove
02/22 0
66   비밀글입니다  [re] c++ 강좌     sinslove
02/22 0
65   비밀글입니다  [re] c++ 강좌     sinslove
02/22 0
64   비밀글입니다  [re] c++ 강좌     sinslove
02/22 0
63   비밀글입니다  [re] c++ 강좌     sinslove
02/22 0
62   비밀글입니다  [re] c++ 강좌     sinslove
02/22 0
[1]..[71][72][73][74][75] 76 [77][78][79][80]

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