征服C指標學習筆記
1.對變數使用&運算子,可以取得該變數的地址。這個地址稱為指向該變數的指標。
指標變數hoge_p儲存了指向其他變數的地址的情況下,可以說“hoge_p指向hoge”。
對指標變數運用*運算子,就等於它指向的變數。如果hoge_p指向hoge,*hoge_p就等於hoge。
2.指標之所以需要定義型別是因為需要利用指標型別來從對應的地址中取出資料。
3.對指標加N,指標前進“當前指標指向的資料型別的長度*N”。
4.空指標是一個特殊的指標值。空指標是指確保沒有指向任何一個物件的指標。
空指標確保它和任何非空指標進行比較都不會相等,因此經常作為函式發生異常時的一個返回值使用。
通常使用巨集定義NULL來便是空指標常量值。#define NULL 0
5. p[i]是*(p+i)的簡便寫法。p[i]可以寫成i[p],但是別寫成這樣。
*p++是指p先加1再與*結合。
6. malloc()主要有兩種使用方式,①動態分配結構體②分配可變長陣列。
ANSI C以前的C,因為沒有void*這樣的型別,所以malloc返回值的型別就被簡單的定義成char*。char*是不能被賦給指向其他型別的 指標變數的,因此在使用malloc()的時候,必須要像下面這樣將返回值進行強制轉型:
book_data_p=(BookData*)malloc(sizeof(BookData));
7.如何解讀C的宣告:
❶首先著眼於識別符號(變數名或者函式名)。
❷從距離識別符號最近的地方開始,依照優先順序解釋派生型別(指標、陣列和函式)。優先順序說明如下,
①用於整理說明內容的括弧
②用於表示陣列的[ ],用於表示函式的( )
③用於表示指標的*
❸解釋完派生型別,使用“of”、"to"、"returning"將它們連線起來。
❹最後,追加資料型別修飾符(在左邊,int、double等)。
比如 int (*func_p)(double);
解讀:func_p is pointer to function(double) returning int.
中文:func_p是指向返回int的函式(引數為double)的指標。