1. 指標指向自己,指標指向的變數值是該指標變數所在的位址。首先找到指標變數 p 的位址 &p,其值為 0x98f2fc28,然後根據該值找到指標變數 p,其值為 0x98f2fc28,然後根據該位址,找到該指標變數指向的值,也就是 *p 的值 0x98f2fc28(和 7-1 對比來看)。這邊最有意思的是,p == &p,*p == p,所以 p == &p==*p (和 p == &a,那麼 *p == a 其實一樣的)
// int *p = (int *)0x98f2fc28; 直接硬編碼指標變數的值
int *p; // 定義乙個指標,指標的值
p = &p;
printf("%#x", &p); // 0x98f2fc28
printf("\n%#x",p); // 0x98f2fc28
printf("\n%#x",*p); // 0x98f2fc28
2. 講解野指標(乙個指標變數,不知道它指哪去了),例如全域性的指標變數指向了乙個函式呼叫完畢後就會銷毀的變數位址,之後這個全域性的指標變數指向哪是完全未知的
int *dangerous_pointer;
void dangeouspointer()
3. 上述**在函式 dangeouspointer() 中加一句 dangerous_pointer = null; 即可,null 為空指標
4. 總結:
1)不要將硬編碼賦值給指標
2)空指標null的用法
3)避免產生野指標
提問:
null 究竟是什麼,什麼資料型別,它如果是指標,那麼指標變數的值是多少,指標變數指向的值又是多少,還有 null 的位址是多少 &null?
C 字元指標的特殊
如果我們對乙個非字元的指標進行操作,方法是這樣的 注意 int p 則p i 等價於 p i 定義 1 int a 7 int p a 或者 2 int a 7 int p p a 或者 3 int a 7 int p p a 1 這樣定義的原因是因為等號兩邊的型別必須匹配,int p a 等號左邊...
7 3 指標與陣列的對比
c c 程式中,指標和陣列在不少地方可以相互替換著用,讓人產生一種錯覺,以為兩者是等價的。陣列要麼在靜態儲存區被建立 如全域性陣列 要麼在棧上被建立。陣列名對應著 而不是指向 一塊記憶體,其位址與容量在生命期內保持不變,只有陣列的內容可以改變。指標可以隨時指向任意型別的記憶體塊,它的特徵是 可變 所...
7 3 指標作為函式的引數
乙個函式在編譯時被分配乙個入口位址,這個入口位址被稱為函式的指標。在c 中,函式名代表函式的入口位址。共有三個重點 1 指標作函式的引數 實現位址傳遞 2 返回指標的函式 3 利用指向函式的指標呼叫函式 指標作函式的引數,具有以下用途 1 指標作函式引數,這時形參接受的是實參的位址。函式中通過對指標...