▌雜項:指標宣告、運算符。


這篇是之前寫草稿多餘的,有關指標的一些基礎知識和特性。
對指標熟悉的可以跳過不看。 (ゝ∀・)

▌指標宣告:

首先介紹一個最重要的符號: * (星號)
宣告定義上,* 可以把資料類型轉為指標類型
例如: void -> void*
    int -> int*
    double -> double*
    某結構 -> 某結構*   (結構也是資料類型)
類型為指標類型的變數稱為指標
任何指標類型的指標所佔的空間大小都是 4 byte
而這 4 個 byte 都是用來儲存地址用的。

看待指標宣告時有兩種看法,請看以下例子:
int* a, b;
int *a, b;
以上兩種宣告行為上並無分別
一種是視 int* 為一體,視int*是一種新的資料類型,
而事實上的確也是如此,因為a變數的類型為int*
而另一種是視 *a 為一體,認為是*a的資料類型變化為指標類型,
事實上也沒有錯,注意這裏b變數的類型為int而並非int*
即 a -> int* , b -> int 。(a是指標類型,b是常規資料類型)
指標宣告時行為很像常規的資料型態宣告,但又有少許的不同,注意一下。

▌如果要把 a, b 都宣告為指標類型可以用以下做法:

int *a, *b;
或者 把int*改一個別名,封裝為新的資料形態。
typedef int* Intptr
Intptr a, b;
還有
typeof(int*) a, b;

注意 #define 衹是純粹的文字替換,
不能夠像 typedef 一樣把int*作為資料形態進行識別。
所以:
#define Intptr int*
Intptr a, b; // a -> int* , b -> int //不對
是不對的。

▌指標宣告、運算符:


有兩個有關指標的運算符:* 和 & 。


* 在宣告上的定義已經介紹過,
* 可以把資料類型轉為指標類型
如: int -> int*
& 在宣告上的定義代表引用類型,這是C++的C語言沒有 = ^ = ,不詳細說明。

而在表達式上,它們的定義/意義不同:
*  為取值運算符
& 為取址運算符
取值運算符,會取出某地址儲存空間變數的值
取址運算符,會取出某變數地址
例如:
*(0x12345678) 代表取出地址為0x12345678上的值
&b 代表 變數 b 的地址。
所以 *(&b) 等價 變數b的值。

技能點得差不多了,

還差 malloc()、calloc()、realloc()、free() 這四個函數,

還有介紹 atexit() 函數。

就可以去垃圾回收(GC)的部分了。


三十天超難捱的,ヽ(・ω・`)。 (´・ω・`)