swap仍然是開了乙個新的空間,只是這個空間的特點與他的引數型別有關。
因此,對於swap(int*a,int*b)不成功。
swap(int*a,int*b)成功。
舉個swap(int,int)的粒子
#includevoid swap(int,int);
int main()
void swap(int c,int d)
對於這個swap,a,b的值不會發生變化。可以將這個過程理解成,在乙個嶄新的swap空間中,建立了建立了兩個新的點c,d然後將他們的值賦成和a,b相同的數。當在swap空間中進行交換後,離開了這個空間,回到了main空間,然後swap空間被釋放,於是c,d,temp三者全部消失。整個過程中沒有對main空間中的a,b進行任何操作。
那麼當使用指標來進行swap處理會有什麼區別?
舉個粒子
#includevoid swap(int*,int*);
int main()
void swap(int*p1 ,int *p2)
因為位址的唯一性,所以在這個swap函式中,指標p1和指標pa相同,指標p2和指標pb相同。也因此,在部分起的**中,回直接導致a,b的內容進行交換。
在2中,為了改變a,b,將指向他們的指標傳入swap方程。
在這裡,為了改變指向他們的指標pa,pb,則需要將指向 【指向他們的指標(pa,pb)】 的指標(ppa,ppb)傳入swap。得到:
#includevoid swap(int**,int**);//
int main()
void swap(int**p1 ,int **p2)
在這裡,temp的型別為int*,是乙個指向int型別的指標。這是因為,temp的型別需要和*p1,*p2保持一致。
感謝智慧型的c,我們可以非常幸運地不用再設定乙個指向pa的ppa,而是可以直接將這一行寫作「swap(&pa,&pb);」。如果用我們的向量理論來解釋,那便是我們說的「&x」表示指向x的位址的向量,無論x是什麼型別。
因為ppa與ppb,以及p1和p2是【指向指標】的指標,因此,他們的資料型別應該是int**,對於swap中的引數型別,亦是如此。但是,感謝智慧型的c,如果在這裡寫成了int *也沒有關係。
#includevoid swap(int*,int*);
int main()
void swap(int*p1 ,int *p2)
得到a,b交換,沒有問題。
/*那麼就到這裡了,
請繼續加油哦~*/
c語言,指標,及其應用
既然指標變數的值是乙個位址,那麼這個位址不僅可以是變數的位址,也可以是其它資料結構的位址。在乙個指標變數中存放乙個陣列或乙個函式的首位址有何意義呢?因為陣列或函式都是連續存放的。通過訪問指標變數取得了陣列或函式的首位址,也就找到了該陣列或函式。這樣一來,凡是出現陣列,函式的地方都可以用乙個指標變數來...
C語言指標應用2
指標的常用應用基本上可以了,c語言指標2 多多指教 該程式只是偽演算法,旨在了解掌握指標的應用 include stdio.h include assert.h 課致力於指標的運算 int main int sum,p1 sum 0 將p先指向a1 0 到位址加到最後,將每個位址對應的資料相加 fo...
C語言 函式指標及其應用
基礎知識 函式指標 function pointer 就是指向函式的指標變數。定義函式指標的基本格式為 資料型別 指標變數名 形參列表 資料型別表示這個指標變數所指向的函式的返回值的型別,形參列表表示這個指標變數所指向的函式所具有的形參列表。例如,若有函式原型為 int fun int a,int ...