1. 程式人生 > >C語言指標詳解----指標宣告定義賦值

C語言指標詳解----指標宣告定義賦值


C語言的指標是讓新手很頭疼的事情,但是由於其太過於靈活,以至於可以很好得的解決一些複雜的問題,因此不得不掌握。我最近正在學習指標相關的內容,因此在這裡做一個小的總結。本篇是不涉及到函式以及結構體等複雜的使用方法,僅僅討論一下指標的基本使用方法。

首先我們區分 *  和  &  ,這兩個運算子,  & 我們在scanf函式中經常使用。為了方便理解我們看下面這行程式碼:

int *p =a;
定義了一個指向a的整型指標,那麼有p=&a ;                  *p =a;

即指標變數的值是地址(&a),*可以理解為取地址 (*p 可以看成 *(&a)取出&a這個地址中的值)。

下面我們看一個複雜點的程式碼:

int n =0,*p = &n,**q = &p;

這裡出現了二級指標,也就是所謂的“指向指標的指標”。 q是指向 int* 型資料的指標變數,首先  p  = &n,這行程式碼很好理解,後面的**q = &p可以拆開來看,首先聲明瞭一個 int* 型資料的指標變數  int **q;再給指標型變數賦值 即(*q) = &p;那麼問題來了,對於指標的賦值應該如何理解呢?就以上面這行定義為例有下面四個賦值語句

p = 1; *q = 2;q = p;*p = 5;

我們先看 p = 1;這個賦值語句,根據我們上面所解釋的p =&a;

我們知道指標變數的值應該是地址,而p = 1;直接將整數賦給了指標變數,編譯時會報錯

cannot convert from 'const int' to 'int *'

我們再看 *q = 2;根據上面的分析我們知道(*q) = &p;同第一句一樣的問題編譯時會報錯 cannot convert from 'const int' to 'int *'

再來看第三句 q = p; 這句很明顯的錯了,p是 int* 型資料 而 q是int**型資料,編譯時會報錯cannot convert from 'int ** ' to 'int *'

我們根據上述 p=&a ;                  *p =a;

可以明顯的看到  *p = 5;這是一個正確的賦值語句。