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

2021-08-21 06:13:31 字數 1254 閱讀 2727

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;這是乙個正確的賦值語句。

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

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

c語言 函式宣告定義總結

巢狀呼叫很好理解,就是在乙個子程式裡呼叫另乙個子程式。void print char a void hello 而鏈式訪問就是把乙個函式的返回值直接當作實參傳遞給下乙個函式。int ret strlen strcat hello world 上例中strcat 的返回值是char型別,是目標串的首位...

C語言 函式(宣告 定義 呼叫)

1 函式的宣告 函式有兩種型別 1 有返回值 前面用 int float double char來定義的,如int even int n 前面的int就是返回值型別,注意最後要加分號。include inteven int n 2 沒有返回值,就用void寫在最前面,如void even int n...