1. 程式人生 > >交換兩個陣列元素的地址可以交換它們的值嗎?

交換兩個陣列元素的地址可以交換它們的值嗎?

#include<stdio.h>
void SWAP(int *a,int *b)
{int *e;
e=a;
a=b;
b=e;
}
void main()
{int i;
int A[2]={0,1};
SWAP(&A[0],&A[1]);
printf("the sorted num is:\n");
for(i=0;i<2;i++)
    printf("A[%d]=%2d\n",i,A[i]);
}

我們知道交換兩個整數的地址可以交換兩個整數的值。但是在陣列中我們交換兩個陣列元素的地址它的輸出結果會是A[0]=1,A[1]=0嗎?答案是否定的。
原因


陣列的實質是一段連續分配的指標,如果你定義了 int a[2]那麼變數 a 就是指向開頭的指標,a+1 即下一個,依此類推取元素值的操作 a[n] 實際上就是 *(a+n) 所以就算你真的“交換”了,a[n]的值還是不會變。
正確的程式碼

void SWAP(int *a,int *b)
{int e;
e=*a;
*a=*b;
*b=e;
}

輸出結果
這裡寫圖片描述