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
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