#include <stdio.h>
#include <stdlib.h>
//這裏爲形參從新分配一個存儲單元
//因此形參的改變不影響實參
//因此獲得的打印值是a1=0,a2=0
void swap1(int x,int y)
{
x=1;
y=1;
}
//一級指針x指向的是a的地址
//*x就是a的地址中存的值,也就是a的值,
//因此改變*x就是改變a的值
void swap2(int *x,int *y)
{
*x=2;
*y=2;
}
//這裏直接就是x和a指向同一片內存區,
//x只不過是a的別名,因此改x就是改a
//可是這個在c裏面是編譯通不過的,由於c裏面尚未引用
//惋惜,我以爲引用真是個好東西
void swap3(int &x,int &y)
{
x=3;
y=3;
}
int main()
{
int a=0,b=0;
swap1(a,b);
printf(
"a1=%d,b1=%d\n",a,b);
//這裏必定要注意,若是傳的參數是a,b,編譯也不會出錯,由於a,b和地址同樣,都是int類型
//只是把a,b的值當地址傳,傳的地址是不對的,會出現segmentation fault
swap2(&a,&b);
printf(
"a2=%d,b2=%d\n",a,b);
swap3(a,b);
printf(
"a2=%d,b2=%d\n",a,b);
}