1.指標(pointer)概念:
指標是一個變數,其值為另一個變數的地址,即,記憶體位置的直接地址,就像其他變數或常量一樣,您必須在使用指標存盤其他變數地址之前,對其進行宣告,指標變數宣告的一般形式為:type *var-name;
在這里,type 是指標的基型別,它必須是一個有效的 C 資料型別,var-name 是指標變數的名稱,用來宣告指標的星號 * 與乘法中使用的星號是相同的,
2.指標的應用:
a. 使用指標時會頻繁進行以下幾個操作:定義一個指標變數、把變數地址賦值給指標、訪問指標變數中可用地址的值,這些是通過使用一元運算子 * 來回傳位于運算元所指定地址的變數的值,例子:https://www.runoob.com/cprogramming/c-pointers.html
b. 在變數宣告的時候,如果沒有確切的地址可以賦值,為指標變數賦一個 NULL 值是一個良好的編程習慣,賦為 NULL 值的指標被稱為空指標,
NULL 指標是一個定義在標準庫中的值為零的常量, 例子: int *ptr = NULL; sub :在大多數的作業系統上,程式不允許訪問地址為 0 的記憶體,因為該記憶體是作業系統保留的,然而,記憶體地址 0 有特別重要的意義,它表明該指標不指向一個可訪問的記憶體位置,但按照慣例,如果指標包含空值(零值),則假定它不指向任何東西,
3. 深入談指標的運動:
a.指標的算術運算:
C 指標是一個用數值表示的地址,因此,您可以對指標執行算術運算,可以對指標進行四種算術運算:++、--、+、-,
假設 ptr 是一個指向地址 1000 的整型(int)指標,是一個 32 位的整數,讓我們對該指標執行下列的算術運算: ptr++;
ptr將指向1004的地址,相同,如果ptr是個字符(char)的指標,其將指向1001地址, 因為int的長度是4位元組,而char是1位元組,
b.指標陣列(pointer array):
假如我們讓陣列存盤指向 int 或 char 或其他資料型別的指標, 例如:int *ptr[MAX];
在這里,把 ptr 宣告為一個陣列,由 MAX 個整數指標組成,因此,ptr 中的每個元素,都是一個指向 int 值的指標,下面的實體用到了三個整數,它們將存盤在一個指標陣列中,
sub: 指標陣列(pointer array) 和 陣列指標(array pointer)的區別!
指標陣列:表示的是一個由指標變陣列成的陣列,也就是說其中的元素都是指標變數,
陣列指標:表示的是這是個指向陣列的指標,那么該指標變數存盤的地址就必須是陣列的首地址,得是個指向行的地址,如 a[2][3] 陣列中的 a,a+1 等,不能是具體的指向列的地址,如 &a[0][1], &a[1][1] 這類地址,
c.指向指標的指標:
定義:指向指標的指標是一種多級間接尋址的形式,或者說是一個指標鏈,通常,一個指標包含一個變數的地址,當我們定義一個指向指標的指標時,第一個指標包含了第二個指標的地址,第二個指標指向包含實際值的位置,
int **var;
d.傳遞指標給函式:
C 語言允許您傳遞指標給函式,只需要簡單地宣告函式引數為指標型別即可,
下面的實體中,我們傳遞一個無符號的 long 型指標給函式,并在函式內改變這個值:https://www.runoob.com/cprogramming/c-passing-pointers-to-functions.html
(通過這種操作,你可以通過改變某個記憶體地址上的變數的數值來改變其數量,)
e.從函式回傳指標:
int * myFunction(){
,,,
,,,
,,,
}
另外,C 語言不支持在呼叫函式時回傳區域變數的地址,除非定義區域變數為 static 變數,
參考:
https://www.runoob.com/cprogramming/c-return-pointer-from-functions.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/63310.html
標籤:C
上一篇:C學習筆記(3)---作用域,陣列, (少量指標入門)
下一篇:C語言:大數取余
