指標解析(二)(原)

2021-12-29 23:38:33 字數 3180 閱讀 5550

1. &ch 代表什麼?

答:變數ch的位址

2. pch 代表什麼?

答:pch是char型別指標,指向ch。

3. &pch 代表什麼?

答:指標變數的位址

4. *pch 代表什麼?

答:對指標變數pch進行解引用,間接訪問了ch的值。

5. *pch + 1 代表什麼?

答:間接訪問操作,取得的拷貝值加一,(*pch + 1)為『b』。

6. *(pch + 1)代表什麼?啊、

答:訪問到了ch之後的下乙個位址上的內容。

7. ++pch 代表什麼?

答:假設當為右值,那麼應該是先遞增,後傳位址。

8. *++pch 代表什麼?

答:假設當為右值,那麼應該是先遞增,後通過位址間接訪問。

9. *pch++ 代表什麼?

答:假設當為右值,那麼應該是先通過位址間接訪問,後遞增。

10. ++*pch 代表什麼?

答:對pch指向的值加一。可以看成這樣,++(*pch)。

11. (*pch)++ 代表什麼?

答:假設為右值,先將pch指向的值傳給左值,然後對拷貝回來的值進行遞增。

12. ++*++pch 代表什麼?

答: ++(*++pch)這樣的話就可以看的比較的清楚了。

13. ++*pch++ 代表什麼?

答: ++(*pch++)參考第九個問題即可。

現在,該是將資料和指標的淵源的時候了。先看以下**:

int a[10];    // 定義了乙個長度為10,int型別的陣列int *pa;      // 定義了乙個int型別的指標pa = a; or pa = &a[0];

上面的**說明了這麼幾個事情:

① 陣列名代表了本陣列第乙個元素的位址。

② 這個事情要用圖來表示:

以上這些小內容只是開胃菜,真正的大餐在後面會慢慢上來!!

1. 字元指標

字串常量是乙個字元陣列。如:」i love you!「,字元陣列以「\0「結尾。此時,陣列表示字串常量和字元指標表示就有極大的區別了:

char amessage = "i love you!";    // 定義了乙個陣列

char *pmessage = "i love you!";    // 定義了乙個字元指標

它們的區別為:

這個圖看起來也好像沒有什麼比較大的區別,無非就是pmessage多了個箭頭。其實它們差別大了去了。amessage始終指向同乙個儲存位置,可以修改字串常量中的字母。而pmessage只是乙個char型別的指標,其初值指向字串的乙個常量,如果你試圖修改字串的內容時,結果就是沒有定義 。

2. 指標的運算

當指標和乙個整型量執行算術運算時,整數在執行加法運算前始終會調集成適的大小進行調整。

①. 算術運算

指標 ± 整數

這個對於陣列和用malloc函式分配的記憶體都適用。 例如以下**:

#include

int main()

for(vp = values; vp != &values[5];)

return 0;

}指標 -指標

這個只有當兩個指標都指向了同乙個陣列之後,這種減法才有實質的意義。 例如以下的**:

#include

int main()

vp1 = values;

vp2 = &values[3];

std::cout << (vp1 - vp2) << std::endl;    // 顯示為-3,ptr_diff型別

return 0;

}3. 指標陣列,陣列指標,多維陣列

何為指標陣列?傳說中,陣列元素全為指標的陣列稱為指標陣列。一維指標陣列的定義形式為:「型別名 *陣列識別符號[陣列長度]」。例如 :

char *ptr_array[10];    // 指標陣列,含有10個char型別指標的陣列

// *ptr_array[i]:指向第i個文字行的首字元

大概就是這樣子了:

那麼指標陣列和陣列指標有什麼區別呢? 陣列指標是指向陣列首元素的位址的指標,其本質為指標;指標陣列是陣列元素為指標的陣列,其本質為陣列。兩者之間的區別就亮了吧。

關於多維陣列和指標陣列:多維陣列,以二維陣列為例。

char ar[3][8] = ;

char *parray[3] = ;

大概也是這個樣子:

很顯而易見,多維陣列和指標陣列有著較大的區別 。對於二維陣列而言:只要定義了乙個二維陣列,無論賦不賦值,系統都會給他分配相應空間,而且該空間一定是連續的。其每個元素表示乙個字元。我們可以通過制定下標對其元素進行修改.

對於指標陣列而言:如char *parray[3]系統至少會分配3連續的空間用來儲存3元素,表示parray是乙個3個元素的陣列,每個元素是乙個指向字元型資料的乙個指標。

在編譯器中,ar[3][8]被看成,*(*(ar + i) + j);將其看成指標形式。

4. 總結一下陣列和指標的區別與聯絡

區別: 

指標陣列

間接訪問資料

直接訪問資料

儲存位址

儲存資料

動態的資料結構

存固定數目且相同型別的元素

malloc(), free()

隱式分配機制

指向匿名資料

自身即資料

聯絡:1. 表示式中陣列名被編譯器當做乙個指向該陣列的第乙個元素的指標

2. 下標總是與指標的偏移量一致

3. 在函式引數中,陣列名被編譯器當做指向該陣列的第乙個元素的指標

4. 在多維陣列中,雖然與多級指標有著不同,但是在編譯器中,還是被看成多級指標的形式。

就說到這裡吧!這一篇寫了好長的時間,寫的不好,請各位大牛指正。多謝了!

摘自  雲端小飛象cg

階 原根 指標

定義 設 使得 成立的最小的 稱為對模 的階,記為 定理 如果模 有原根,那麼它一共有 個原根。定理 若,則。定理 如果 為素數,那麼素數 一定存在原根,並且模 的原根的個數為 定理 設 是正整數,是整數,若 模的階等於 則稱為模 的乙個原根。假設乙個數 對於模來說是原根,那麼 的結果兩兩不同,且有...

二重指標指向指標陣列解析

typedef int init fnc t void 定義函式型別 init fnc t init fnc ptr 二重函式指標 init fnc t init sequence for init fnc ptr init sequence init fnc ptr init fnc ptr 函式...

struct 結構體解析(原)

一 基本概念 結構體是乙個或是多個變數的集合,這些變數可能為不同的型別,為了處理的方便而將這些變數組合在乙個名字之下。我們將關鍵字struct引入了結構宣告中。結構宣告包含在花括號內的一系列宣告組成。例如 以下是乙個巨普通的結構體,表示座標。point 為結構標記 x,y為成員。struct poi...