C語言:函式中引數的傳值與傳地址
阿新 • • 發佈:2018-12-09
任務程式碼:
-
#include <stdio.h>
-
void swap(int *a ,int *b)//按之前對指標認識,*a代表指標變數a,a儲存的是地址,*a是地址的值。
-
{ //但是可以看到下面傳輸過程中swap(&a,&b),取的是地址傳輸給了*a.看似是矛盾的!
-
//這裡著重注意特例!!!:函式的引數是指標型別,會將一個變數的地址傳送到被呼叫的函式中。
-
//不是傳遞值,是傳遞地址值!!!!!!
-
int t;
-
t=*a;
-
*a=*b;
-
*b=t;
-
return;
-
}
-
int main()
-
{
-
int a,b;
-
printf("請輸入兩個數:");
-
scanf("%d %d",&a,&b);
-
printf("呼叫前:%d %d\n",a,b);
-
swap(&a,&b);//傳輸的是a,b兩個變數的地址
-
printf("呼叫後:%d %d\n",a,b);
-
return 0;
-
}
執行情況:
知識總結:
函式呼叫結束後回會釋放記憶體空間;
傳地址需要運用指標來做:
尤其注意特例:和傳統指標概念理解的的不同
另外:這兩種看似符合邏輯的做法也是行不通的!(尤其是第二種)
所有函式指標在執行的時候,形式引數的值無論怎麼變化都會被記憶體釋放(不會影響返回結果),而真正有存在意義的是形式引數中存放的地址,將會再返回的時候影響結果
心得體會: