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语言指针详解----指针声明定义赋值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pixhawk PX4FMU和PX4IO
- 下一篇: Pixhawk---通过串口方式添加一个