C語言指標是很容易學習和。某些C語言程式設計任務的指標進行更容易和其它任務,如動態儲存器分配,不能離開使用指標來執行。所以有必要學習指標成為一個完善的C程式員。讓我們開始學習指標的簡單和容易的步驟。
每一個變數是一個記憶體地址位置,每個儲存單元都有其定義的地址,可以用符號(&)運算子,它表示一個記憶體地址進行存取。考慮下面的例子,這將列印中定義的變數的地址。
#include <stdio.h> int main () { int var1; char var2[10]; printf("Address of var1 variable: %x ", &var1 ); printf("Address of var2 variable: %x ", &var2 ); return 0; }
當上述程式碼被編譯和執行時,它會產生一些輸出如下:
Address of var1 variable: bff5a400 Address of var2 variable: bff5a3f6
所以,明白了什麼是記憶體地址以及如何存取它,所以這個概念的基礎上。現在,讓我們來看看什麼是指標。
指標是一個變數,其值是另一個變數的地址,所述儲存器位置,即,直接地址。像任何變數或常數,必須宣告指標之前,你可以用它來儲存任何變數的地址。一個指標變數宣告的一般形式是:
type *var-name;
在這裡,指標型別為基本型別;它必須是一個有效的C語言資料型別,var-name是指標變數的名稱。 星號*用來宣告指標。然而,在語句中的星號被用來指定一個變數作為一個指標。以下是有效的指標宣告:
int *ip; /* yiibaier to an integer */ double *dp; /* yiibaier to a double */ float *fp; /* yiibaier to a float */ char *ch /* yiibaier to a character */
所有的指標的值的實際資料的型別可以是整數,浮點數,字元,或以其他方式,代表儲存器地址的長十六進位制數。不同資料型別的指標之間的唯一區別是變數的資料型別或常數的指標指向。
有一些重要的操作,使用指標的幫助。 (a)定義一個指標變數(b)分配一個變數的指標(c)地址終於在指標變數的可用地址來存取的值。這是通過使用一元運算子*返回位於其運算元所指定的地址的變數的值完成。下面的例子利用這些操作:
#include <stdio.h> int main () { int var = 20; /* actual variable declaration */ int *ip; /* yiibaier variable declaration */ ip = &var; /* store address of var in yiibaier variable*/ printf("Address of var variable: %x ", &var ); /* address stored in yiibaier variable */ printf("Address stored in ip variable: %x ", ip ); /* access the value using the yiibaier */ printf("Value of *ip variable: %d ", *ip ); return 0; }
當上述程式碼被編譯和執行時,它會產生一些輸出如下:
Address of var variable: bffd8b3c Address stored in ip variable: bffd8b3c Value of *ip variable: 20
它始終是一個很好的做法,以一個NULL值賦給如果沒有確切的地址將被分配一個指標變數。這樣做是在變數宣告時分配NULL指標被稱為空指標。
NULL指標是一個常數為零在幾個標準庫中定義的值。考慮下面的程式:
#include <stdio.h> int main () { int *ptr = NULL; printf("The value of ptr is : %x ", ptr ); return 0; }
當上述程式碼被編譯和執行時,它產生了以下結果:
The value of ptr is 0
在大多數作業系統中,程式不允許在地址0來存取儲存器,因為該儲存器是由作業系統保留。然而,儲存器地址0具有特別重要的意義;它表明,該指標不指向一個存取的儲存器位置。但按照慣例,如果一個指標包含空(null/零)值,則假定為不指向什麼。
要檢查一個空指標,可以使用if語句如下:
if(ptr) /* succeeds if p is not null */ if(!ptr) /* succeeds if p is null */
指標有很多概念,它們對C語言程式設計非常重要。有以下幾個重要指標概念,一個C程式員應該明確:
概念 | 描述 |
---|---|
C語言指標運算 | 有跡象表明,可以對指標使用四則運算子:++, --, +, - |
C語言指標陣列 | 可以定義陣列持有一些指標 |
C語言指標的指標 | C語言允許指標的指標 |
C語言傳遞函式指標 | 通過參照或地址傳遞引數均使傳遞的引數將在呼叫函式被呼叫函式變化 |
C語言從函式返回指標 | C語言允許函式返回一個指向區域性變數,靜態變數和動態分配的儲存器 |