當前位置:才華齋>計算機>C語言>

c語言之指標基礎知識

C語言 閱讀(5.52K)

將指標和普通變數進行比較,將有助於您理解指標。所謂“普通變數”就是儲存器中能夠儲存數值的一個位置。例如,當您宣告變數i為一個整數時,四個位元組的儲存空間就為它預留出來了。程式中用i表示那個預留出的位置。在機器的層面上看,這個位置具有一個記憶體地址。從這個地址開始的四個位元組對您(程式設計師)來說就是變數i,它們可以儲存一個整數。

c語言之指標基礎知識

C語言之指標基礎知識

指標就不同了。指標是指向另一個變數的變數。意思是一個指標儲存的是另一個變數的記憶體地址。換句話說,指標儲存的並不是普通意義上的數值,而是另一個變數的'地址值。一個指標儲存了另一個變數的地址值,就說這個指標“指向”了那個變數。

因為指標儲存了地址而不是數值,所以它有兩個部分。指標本身儲存一個地址,這個地址又指向一個數值,即:指標本身和被指向的數值兩部分。這個概念開始可能有些不好理解,而一旦掌握將是極有裨益的。

下面的例子顯示了一個典型的指標:

#include

int main()

{

int i,j;

int *p;

p=&i;

*p=5;

j=i;

printf("%d %d %d", i, j, *p);

return 0;

}

程式的第一行聲明瞭兩個普通的整型變數i和j。int *p這行聲明瞭一個名為p的指標。它告訴編譯器,所宣告的變數p是一個指向整數的指標。*表示宣告的是指標而不是普通變數。您可以建立任何型別的指標:float,結構體,char等等。只要用*指出您要的是指標而非普通變數即可。

p=&i 這行您肯定還沒見過。C語言中, 這個表示式的意思就是“將i的地址賦值給p。”這條語句一經執行,p就“指向”了i。而此前p的內容是一個未知的隨機地址,直接使用的話很可能會導致程式錯誤或類似的程式崩潰。

畫圖是觀察程式執行過程的好方法。宣告i、j和p後,程式的狀態是這個樣子:

上圖中的三個變數i、j和p都被宣告過了,但還沒有初始化。所以將兩個整型變數以含有問號的方框表示——程式執行到這一步時它們的內容可以是任何值。將指標以圓圈表示,以區別於儲存數值的一般變數,隨意的幾個箭頭表示它現在可能指向任何一個位置。

執行了p=&i這行後,p被初始化為指向i,像這樣:

p指向i之後,i代表的記憶體位置就有了兩個名字。它除了叫做i,現在還叫做*p。這就是為什麼說C中的指標變數有兩個部分:p是容納地址的位置,而*p是地址指向的位置。因此*p=5的意思是將p指向的位置的值設為5,像這樣:

因為*p和i代表同一位置,i的值自然也就變成了5。於是j=i;將j也設為5,printf語句的輸出就是5 5 5。

指標的主要特性是它天生具有兩部分。指標本身除了儲存地址,還指向某種型別的值,而這個值的地址正是指標儲存的那個。在上面的例子中,指標本身是p,它指向的值是*p。