關於指標的一些理解(以自定義swap函式為例)

2021-09-24 09:15:01 字數 751 閱讀 7383

void swap(int *p1,int *p2)
通過指標的操作實現虛實結合。

關於虛實結合,我的理解是:主函式中傳入位址給臨時設定的形參,即指標變數p1,p2,這是實向虛的轉換。而函式體內的操作,是將指標所指向的空間的內容發生交換(此空間即主函式傳入的指標所指空間),這是虛對實的操作。最後函式體結束,臨時設定的p1,p2,temp釋放。

然而初學者往往會出現變種,例如:

void swap(int a,int b)
此操作希望通過形a,b而不通過指標進行交換操作,顯然是不正確的。

因為主函式的實參傳給臨時變數形參a,b後,形參a,b的值確確實實進行了交換,但無法和實參進行鏈結的關係,當函式結束,a,b被釋放,主函式呼叫此函式相當於未進行任何操作。

又例如:

void swap(int *p1,int *p2)
此操作在執行*temp=*p1;語句時出現問題,temp是乙個int作為基型別的指標,

但並未指明temp所指向的具體位址值,通過p1指標所指向的內容對未確定位址的空間進行賦值操作是十分危險的。

又如:試圖想通過改變形參指標變數的值來改變實參指標變數的值:

void swap(int *p1,int *p2)
函式內臨時指標p1,p2確實得到了交換,然而其實質仍與void swap(int a,int b)的操作完全相同。

關於指標的一些理解

指標陣列是陣列,是乙個存放指標的陣列。eg int arr1 10 整形指標陣列,有十個元素,每個元素都是整形指標。char arr2 4 字元指標陣列,有四個元素,每個元素都是字元指標。char arr3 5 陣列有5個元素,每個元素是字元型的二級指標。陣列指標是指標,是乙個指向陣列的指標。eg ...

自定義控制項的一些總結

自定義控制項功能 隱藏自定義控制項中textbox控制項的邊框,在 textbox 控制項下面劃一條直線。並可以通過屬性控制是否只可以輸入正整數 注意 1.屬性的特性描述既可以填也可以不填,如果不填該屬性將預設顯示到自定義控制項的雜項分組。description 該屬性在屬性欄中的描述 browsa...

關於C指標的一些理解

有時總被指標的用法及型別所困擾,那我簡單理解一下指標。指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的乙個位址。要搞清乙個指標需要搞清指標的四方面的內容 指標的型別,指標所指向的型別,指標的值或者叫指標所指向的記憶體區,還有指標本身所佔據的記憶體區。如下例子 1 int ptr 2 cha...