指標的實質
是乙個變數
;乙個儲存記憶體位址的變數
在x86系統中佔4個位元組,在x64系統中佔8個位元組
指標的作用是指向記憶體的另乙個地方,並且明確了指向的記憶體位址大小(即寬度),x86/x64系統的系統位址匯流排為32/64位,且cpu、暫存器單次所能處理的資料為32/64位;
概括的講指標的主要內容見下圖:
通過在資料型別後面跟星號,再加上指標變數的名字即可宣告指標;
* 在指標定義的時候,星號*是和型別結合起作用的;
* 在指標使用的時候,星號*是獲取記憶體值操作(解引記憶體)
星號兩邊的空白符無關緊要,
指標的初試化可以讓指標指向某個變數的位址,也可以讓指標指向乙個分配好的記憶體或者字串變數,當然也可以指向null。
& 與 * 互為逆運算
* :解引記憶體,解引記憶體中儲存的值,支援讀取和修改(前提是此記憶體支援修改)
初始化時星號 * 與指標型別一同起作用,指標變數 p 始終賦值的是位址 ,所以在此需要使用位址操作符進行賦值
*p 代表該記憶體的值;
指標變數p指向的記憶體長度就是 p的長度;
如果為 void 型別,則長度不確定,在gcc中,預設長度為1位元組;
int a=10;
*&a 等價於 a;
int *p =&a;
*p等價於a;
*&p等價於p
&*p等價於p
void p型別,其他型別指標隱式轉換成該型別;
不能通過p來獲取記憶體的值,需要先轉換成特定型別才可取值;
可以接受任何型別的指標;
賦給其他型別的指標需要強轉;
不能進行解引用 * 運算,必須先轉化;
沒有記憶體長度;
1、 即可以指向字元,也可以指向字串(指向字串的首位址);
2、 將字元或者字串傳給函式做引數,也可以通過字元指標完成;
sizeof( p ):指標的長度 4/8位元組
sizeof( *p ):指標對應型別的長度
1) 將指標傳遞給函式,此時函式可以修改指標所引用的資料,也可以高效地傳遞大塊資訊;
2) 宣告函式指標,本年智商函式表示法就是指標表示法,函式名字經過求值會變成函式的位址,然後函式引數會被傳遞給函式;
通過指標傳遞和返回資料
傳遞指標可以讓多個函式訪問指標所引用的物件,而不用把物件宣告為全域性可訪問;
函式形參傳遞給函式的是引數值的副本,修改形參並不會影響實參,
使用指標傳遞資料的乙個主要原因是函式可以修改原資料;
void swap(int *pnum1 , int *pnum2)
int main()
將複雜資料用結構體指標的形式傳遞給函式和從函式返回;
如果指標持有函式的位址,就能動態控制程式的執行流;
Docker極簡入門
我有幾張阿里雲幸運券分享給你,用券購買或者公升級阿里雲相應產品會有特惠驚喜哦!把想要買的產品的幸運券都領走吧!快下手,馬上就要搶光了。root chatdevops yum y install docker root chatdevops docker version docker version ...
django極簡入門
django極簡入門 i.安裝python環境 ii.安裝django pip install djangoiii.建立django專案資料夾 django admin startproject myprojectiv.在專案資料夾內,如myproject myproject,建立視 件,如view...
Shell極簡入門
簡單shell案例 使用vim建立乙個檔案hello.sh 首行新增宣告,使用的是 bin目錄下的bash直譯器,因為linux有很多的直譯器 bin bash 然後新增上一句 echo hello 按 輸入wq 儲存退出 為檔案新增可執行許可權 控制台輸入以下內容 chmod x hello.sh...