2013年6月22日 星期六

call by value VS call by address (傳值VS傳址)

call by value VS call by address


1.call by address



#include <stdio.h>
#include <stdlib.h>

int main()
{
    int x =5;
    int y =30;
    Swap(x,y);
    printf("x:%d,y:%d",x,y);
}

void Swap(int a, int b)
{
    int temp = a;
    a = b;
    b = temp;
}



the result is :
 



 我要把x , y 兩數交換,但似乎沒有達成我的需求   WHY?

 當我執行到 int x =5 ,系統就會立刻分配記憶體空間給變數使用

所以每個變數都會有一個記憶體位址。


執行swap前



main 中的x
Main 中的y
Swap中的a
Swap中的b
Value
5
30
5
10
Mem_addr
0x7
0x8
0xFF
0xFE


執行swap後



main 中的x
Main 中的y
Swap中的a
Swap中的b
Value
5
30
10
5
Mem_addr
0x7
0x8
0xFF
0xFE



可以看出來他的確有把兩數交換,但他沒有真的把原始的位址傳入
所以call by vaule 只是把value複製給對方。



2.call by address:


#include <stdio.h>
#include <stdlib.h>

int main()
{
    int x =5;
    int y =30;
    Swap(&x,&y);
    printf("x:%d,y:%d",x,y);
}

void Swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

the result is:







1.&:取值運算子   ---就是把變數的位址出來

2.然而void.......(int *a, .....) 指標 a 指向 x

執行swap前




main 中的x
Main 中的y
Swap中的a
Swap中的b
Value
5
30
0x7
0x8
Mem_addr
0x7
0x8
0xFF
0xFE



執行swap後



main 中的x
Main 中的y
Swap中的a
Swap中的b
Value
30
5
0x7
0x8
Mem_addr
0x7
0x8
0xFF
0xFE




reference:http://wp.mlab.tw/?p=176
 






1 則留言:

  1. Best Casino Apps and Sportsbook Apps in Colorado 2021
    Sports Betting 파라오 도메인 & more. betting You'll 비트 코인 게임 be able to wager at mgm 바카라 the best online sportsbook apps on our list of the 슬롯 나라 best sites to bet on

    回覆刪除