....

2014年5月25日 星期日

[長知識] C語言 - 新手篇章 - 透過傳值傳址互換記憶體

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

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

//兩數交換
void changeByValue(int a, int b){
//a, b為方法內的區域變數
//傳值交換

printf("a的記憶體位置:%d,值:%d\n", &a, a);
  printf("b的記憶體位置:%d,值:%d\n", &b, b);
 
  int temp = a;
  a = b;
  b = temp;
 
  printf("a的記憶體位置:%d,值:%d\n", &a, a);
  printf("b的記憶體位置:%d,值:%d\n", &b, b);
 
}

//兩數交換
void changeByAddress(int *a, int *b){
//a, b為方法內的區域變數
//傳址交換

printf("a的記憶體位置:%d,值:%d\n", &a, *a);
  printf("b的記憶體位置:%d,值:%d\n", &b, *b);
 
  int temp = *a;
  *a = *b;
  *b = temp;
 
  printf("a的記憶體位置:%d,值:%d\n", &a, *a);
  printf("b的記憶體位置:%d,值:%d\n", &b, *b);
}

int main(int argc, char *argv[]) {

int a = 10, b = 20;
printf("changeByValue------------------------------------\n");
printf("--a的記憶體位置:%d,值:%d\n", &a, a);
printf("--b的記憶體位置:%d,值:%d\n", &b, b);

changeByValue(a, b); //a:20, b=10
printf("--a透過傳值方法,運算後記憶體位置為:%d,值為:%d\n", &a, a); //a=10, b=20
printf("--b透過傳值方法,運算後記憶體位置為:%d,值為:%d\n", &b, b);

printf("changeByAddress-----------------------------------\n");

printf("--a的記憶體位置:%d,值:%d\n", &a, a);
printf("--b的記憶體位置:%d,值:%d\n", &b, b);
//要傳值給他,可是他只吃址
//所以給址(&a)
changeByAddress(&a, &b);
printf("--a透過傳值方法,運算後記憶體位置為:%d,值為:%d\n", &a, a);
printf("--b透過傳值方法,運算後記憶體位置為:%d,值為:%d\n", &b, b);

return 0;
}

沒有留言:

張貼留言