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的值交換後輸出了~,原因是用指針直接操作了內存地址中的值