指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的乙個位址。
要搞清乙個指標需要搞清指標的四方面的內容:指標的型別,指標所指向的
型別,指標的值或者叫指標所指向的記憶體區,還有指標本身所佔據的記憶體區。讓
我們分別說明。
先宣告幾個指標放著做例子:
例一:
(1)int *ptr;
(2)char *ptr;
(3)int **ptr;
(4)int (*ptr)[3];
(5)int *(*ptr)[4];
如果看不懂後幾個例子的話,請參閱我前段時間貼出的文章《如何理解c和c
++的複雜型別宣告》。
1。 指標的型別。
從語法的角度看,你只要把指標宣告語句裡的指標名字去掉,剩下的部分就
是這個指標的型別。這是指標本身所具有的型別。讓我們看看例一中各個指標的
型別:
(1)int *ptr; //指標的型別是int *
(2)char *ptr; //指標的型別是char *
(3)int **ptr; //指標的型別是 int **
(4)int (*ptr)[3]; //指標的型別是 int(*)[3]
(5)int *(*ptr)[4]; //指標的型別是 int *(*)[4]
怎麼樣?找出指標的型別的方法是不是很簡單?
2。指標所指向的型別。
當你通過指標來訪問指標所指向的記憶體區時,指標所指向的型別決定了編譯
器將把那片記憶體區里的內容當做什麼來看待。
從語法上看,你只須把指標宣告語句中的指標名字和名字左邊的指標宣告符
*去掉,剩下的就是指標所指向的型別。例如:
(1)int *ptr; //指標所指向的型別是int
(2)char *ptr; //指標所指向的的型別是char
(3)int **ptr; //指標所指向的的型別是 int *
(4)int (*ptr)[3]; //指標所指向的的型別是 int()[3]
(5)int *(*ptr)[4]; //指標所指向的的型別是 int *()[4]
在指標的算術運算中,指標所指向的型別有很大的作用。
指標的型別(即指標本身的型別)和指標所指向的型別是兩個概念。當你對c越
來越熟悉時,你會發現,把與指標攪和在一起的「型別」這個概念分成「指標的
型別」和「指標所指向的型別」兩個概念,是精通指標的關鍵點之一。我看了不
少書,發現有些寫得差的書中,就把指標的這兩個概念攪在一起了,所以看起書
來前後矛盾,越看越糊塗。
3。 指標的值,或者叫指標所指向的記憶體區或位址。
指標的值是指標本身儲存的數值,這個值將被編譯器當作乙個位址,而不是
乙個一般的數值。在32位程式裡,所有型別的指標的值都是乙個32位整數,因為
32位程式裡記憶體位址全都是32位長。
指標所指向的記憶體區就是從指標的值所代表的那個記憶體位址開始,長度為si
zeof(指標所指向的型別)的一片記憶體區。以後,我們說乙個指標的值是xx,就相
當於說該指標指向了以xx為首位址的一片記憶體區域;我們說乙個指標指向了某塊
記憶體區域,就相當於說該指標的值是這塊記憶體區域的首位址。
指標所指向的記憶體區和指標所指向的型別是兩個完全不同的概念。在例一中
,指標所指向的型別已經有了,但由於指標還未初始化,所以它所指向的記憶體區
是不存在的,或者說是無意義的。
以後,每遇到乙個指標,都應該問問:這個指標的型別是什麼?指標指向的
型別是什麼?該指標指向了**?
4。 指標本身所佔據的記憶體區。
指標本身佔了多大的記憶體?你只要用函式sizeof(指標的型別)測一下就知道
了。在32位平台裡,指標本身佔據了4個位元組的長度。
指標本身佔據的記憶體這個概念在判斷乙個指標表示式是否是左值時很有用。
第一章。指標的概念
第一章。指標的概念 指標是乙個特殊的變數 它裡面儲存 的數值被解釋成為記憶體裡的乙個位址 指標也是一種資料型別,並且也是有值的。要搞清乙個指標需要搞清指標的四方面的內容 指標的型別,指標所指向的型別,指標的值或者叫指標所指向的記憶體區,還有指標本身所佔據的記憶體區。讓我們分別說明。先宣告幾個指標放著...
第一章 資料的概念
資料元素 是組成資料的 有一定意義的基本單位,在計算機中通常作為整體處,也被稱為記錄。比如人類中的人就是資料元素。資料項 資料項是資料不可分割的最小單位,乙個資料元素可以由若干個資料項構成。比如人這種資料元素,可以有眼 耳 嘴 手 腳這些資料項。資料物件 是性質相同的資料元素的集合,是資料的子集。性...
第一章 XSLT的概念
1.xslt的概念 1.1 什麼是xslt 1.2 為什麼要用xslt 1.3 xslt的歷史 1.4 什麼是xpath 1.5 xslt和css的比較 1.6 xslt和ie5 1.xslt的概念 我們首先來澄清乙個概念,大家可能聽說過xsl extensible stylesheet langu...