- copy main主程式 的變數值給 一個獨立行使程式的 void函數 (他被分配到兩個記憶體位址,所以做交換時,會有自己交換,而主程式未交換的情形)
void swap (int c , int d){
int temp=c;
c=d;
d=temp;
}
int main(){
int a=5,b=10;
swap(a,b);
printf(" %d %d ", a,b);
}
|
| main的a | main的b | swap的c | swap的d | ||
| 儲存值 | 5 | 10 | …… | 5 | 10 |
| 記憶體位址 | 0x04 | 0x08 | …… | 0x16 | 0x20 |
當副程式的程式執行完之後記憶體會變如下:
| main的a | main的b | swap的c | swap的d | ||
| 儲存值 | 5 | 10 | …… | 10 | 5 |
| 記憶體位址 | 0x04 | 0x08 | …… | 0x16 | 0x20 |
- 綁定位址,對指定位址的值做交換
void swap (int *c , int *d){
int temp=*c;
*c=*d;
*d=temp; "做deference,對指定位址的值做交換"
}
int main(){
int a=5,b=10;
swap(&a,&b);
printf(" %d %d ", a,b);
}
|
| main的a | main的b | swap的*c | swap的*d | ||
| 儲存值 | 5 | 10 | …… | 0x04 | 0x08 |
| 記憶體位址 | 0x04 | 0x08 | …… | 0x16 | 0x20 |
所以副程式執行完交換後記憶體如下表示:
| main的a | main的b | swap的*c | swap的*d | ||
| 儲存值 | 10 | 5 | …… | 0x04 | 0x08 |
| 記憶體位址 | 0x04 | 0x08 | …… | 0x16 | 0x20 |
Call by reference (C++有,C沒有)
- void函數參考 main函數的一切(記憶體以及數值)
- The formula of reference: int &c=a; (a為一左值),因此c擁有和a相同的一切,c可以獨立活動
void swap (int &c , int &d){
int temp=c;
c=d;
d=temp;
}
int main(){
int a=5,b=10;
swap(a,b);
printf(" %d %d ", a,b);
return 0;
}
|
這樣就會是用傳參考的方式來接收主程式a跟b的值,此時記憶體如下所示:
| main的a | main的b | swap的&c | swap的&d | ||
| 儲存值 | 5 | 10 | …… | 5 | 10 |
| 記憶體位址 | 0x04 | 0x08 | …… | 0x04 | 0x08 |
沒有留言:
張貼留言