指標,在c/c++語言中一直是很受寵的;幾乎找不到乙個不使用指標的c/c++應用。用於儲存資料和程式的位址,這是指標的基本功能。用於指向整型數, 用整數指標(int*);指向浮點數用浮點數指標(float*);指向結構,用對應的結構指標(struct *** *);指向任意位址,用無型別指標(void*)。
有時候,我們需要一些通用的指標。在c語言當中,(void*) 可以代表一切;但是在c++中,我們還有一些比較特殊的指標,無法用(void*)來表示。事實上,在c++中,想找到乙個通用的指標,特別是通用的函式指標簡直是乙個「不可能任務」。
c++是一種靜態型別的語言,型別安全在c++中舉足輕重。在c語言中,你可以用void*來指向一切;但在c++中,void*並不能指向一切,就算能,也失去了型別安全的意義了。型別安全往往能幫我們找出程式中潛在的一些bug。
下面我們來**一下,c++中如何儲存各種型別資料的指標。
c++指標** (一)資料指標
沐楓網誌
1. 資料指標
資料指標分為兩種:常規資料指標和成員資料指標
1.1 常規資料指標
這個不用說明了,和c語言一樣,定義、賦值是很簡單明瞭的。常見的有:int*, double* 等等。
如:int
value
=123
;int
*pn =&
value;
1.2 成員資料指標
有如下的結構:
struct
mystruct
;現在有乙個結構物件:
mystruct me;
mystruct* pme = &me;
int*
pvalue =&
me.value;//或
int*
pvalue = &pme->value;
當然了,這個指標仍然是屬於第一種範籌----常規資料指標。
好了,我們現在需要一種指標,它指向mystruct中的任一資料成員,那麼它應該是這樣的子:
intmystruct::
*pmv =&
mystruct::value;//或
intmystruct::
*pmk =&
mystruct::key;
intvalue
=pme
->*
pmv;
//取得pme的value成員資料。
intkey
=me.
*pmk;
//取得me的key成員資料。
那麼,在什麼場合下會使用到成員資料指標呢?
確實,成員指標本來就不是一種很常用的指標。不過,在某些時候還是很有用處的。我們先來看看下面的乙個函式:
intsum(mystruct* objs,
intmystruct::
*pm,
intcount)
這個函式的功能是什麼,你能看明白嗎?它的功能就是,給定count個mystruct結構的指標,計算出給定成員資料的總和。有點拗口對吧?看看下面的程式,你也許就明白了:
mystruct me[
10]
=,,,,,,,,,
};int
sum_value
=sum(me,
&mystruct::value,
10);
//計算10個mystruct結構的value成員的總和: sum_value 值 為 110 (2+4+6+8+
+20)
intsum_key
=sum(me,
&mystruct::key,
10);
//計算10個mystruct結構的key成員的總和: sum_key 值 為 100 (1+3+5+7+
+19)
也許,你覺得用常規指標也可以做到,而且更易懂。ok,沒問題:
intsum(mystruct* objs,
intcount)
C語言指標高階部分 void指標和資料指標
void指標 資料指標 void指標 void指標的基本概念 void的意思就是 無型別 void指標則為 無型別指標 void指標可以指向任何型別的資料。所以void指標一般被稱為通用指標或者泛指針,或者叫做萬能指標定義形式 void p 在c語言中在任何時候都可以用void型別的指標來代替其他型...
C語言指標高階部分 void指標和資料指標
概念 void指標 資料指標 void指標 void指標的基本概念 void的意思就是 無型別 void指標則為 無型別指標 void指標可以指向任何型別的資料。所以void指標一般被稱為通用指標或者泛指針,或者叫做萬能指標 void的意思就是 無型別 void指標則為 無型別指標 void指標可以...
感悟《C和指標》 3 資料
所有的程式都對資料進行操作,本章對資料的各個方面進行了描述。特別是變數的三大屬性 變數的作用域 鏈結屬性和儲存型別決定了變數的 可視性 和 生命期 1.基本資料型別 c語言的基本資料型別包括整型 浮點 指標和聚合型別。1 整型家族。整型家族包括字元 char 短整型 short int 整型 int...