swap算法——c語言中值傳遞和引用傳遞的問題

#include <stdio.h>
void swap(int x,int y);
void main()
{
int a,b;
a=1;
b=10;
printf("a和b的值爲:\n");
printf("a=%d,b=%d\n",a,b);//結果1
swap(a,b);
printf("a和b交換後的值爲:\n");
printf("a=%d,b=%d\n",a,b);//結果2
}


void swap(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;

}

可以發現輸出結果1和結果2一樣,也就是a和b並沒有交換,原因是c語言是值傳遞,在調用swap(a,b); 把a和b傳到void swap(int x,int y)時候,實際上是把a,b的副本拿來用,

並不改變原來a和b變量的值。也就是函數調用的參數按值傳遞,而不是按引用傳遞(傳遞的是地址),所以這塊需要用指針才行,我們對代碼做如下更改

#include <stdio.h>
void swap(int *x,int *y);
void main()
{
int a,b;
a=1;
b=10;
printf("a和b的值爲:\n");
printf("a=%d,b=%d\n",a,b);
swap(&a,&b);
printf("a和b交換後的值爲:\n");
printf("a=%d,b=%d\n",a,b);
}


void swap(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;


}

這個時候,就把a和b的值交換後輸出了~,原因是用指針直接操作了內存地址中的值


發佈了28 篇原創文章 · 獲贊 35 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章