1. 程式人生 > >## 標題:指標的值傳遞與地址傳遞,全域性變數傳遞,與形參傳遞的區別與結果

## 標題:指標的值傳遞與地址傳遞,全域性變數傳遞,與形參傳遞的區別與結果

標題:指標的值傳遞與地址傳遞,全域性變數傳遞,與形參傳遞的區別與結果

1.值傳遞與地址傳遞
下面看著段程式碼:void swap(int a, int b){
int t;
t=a;
a=b;
b=t;
}
void swap1(int *p1,int *p2){
int t;
t=*p1;
*p1=*p2;
*p2=t;

}
main(){
int a=5,b=9,*pointer_1,pointer_2;
pointer_1=&a;
pointer_2=&b;
swap(a,b);
printf(“a=%d,b=%d\n”,a,b);
swap1(pointer_1,pointer_2);
printf(“a=%d,b=%d”,a,b);
}
//值傳遞與地址傳遞
我分別用了兩個函式不同的傳遞方法
結果如下圖:在這裡插入圖片描述


第一個為值傳遞,第二個為地址傳遞
##2全域性變數的可以導致交換
程式碼如下:
#include <stdio.h>
int a=5,b=9;
void swap(int,int){
int t;
t=a;
a=b;
b=t;
}
int main(){
printf(“first: a=%d,b=%d”,a,b);
swap(a,b);
printf("\nsecond: a=%d,b=%d",a,b);
}
結果如下:
在這裡插入圖片描述
由上述程式碼可知全域性變數可以發生值的交換。
3.形參的傳遞
程式碼如下:
#include<stdio.h>
swap(int p1,int
p2){
int
p;
p=p1;
p1=p2;
p2=p;
}
main(){
int a=5,b=9,*pointer_p1,*pointer_p2;
pointer_p1=&a;
pointer_p2=&b;
swap(pointer_p1,pointer_p2);
printf(“a=%d,b=%d”,a,b);
}
//執行完程式後,p1指向a,p2指向b,函式執行只是交換了p1,p2的指向,既有執行完函式的三個賦值語句後,p1指向b
//p2指向a;並沒有改變主函式a,b的值,程 序執行的結果a=5,b=9
結果如下:
![在這裡插入圖片描述](https://img-blog.csdn.net/20181022221420205?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMzM3MzM1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA
在這裡插入圖片描述
//執行完程式後,p1指向a,p2指向b,函式執行只是交換了p1,p2的指向,既有執行完函式的三個賦值語句後,p1指向b
//p2指向a;並沒有改變主函式a,b的值,程 序執行的結果a=5,b=9