日歷
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|
28 | 29 | 30 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
統(tǒng)計
- 隨筆 - 58
- 文章 - 0
- 評論 - 55
- 引用 - 0
導航
常用鏈接
留言簿(3)
隨筆分類(58)
隨筆檔案(58)
搜索
最新評論

閱讀排行榜
評論排行榜
|
指針有兩個屬性:指向變量/對象的 地址和長度 但是指針只存儲地址,長度則取決于指針的類型 編譯器根據(jù)指針的類型從指針指向的地址向后尋址 指針類型不同則尋址范圍也不同,比如: int*從指定地址向后尋找4字節(jié)作為變量的存儲單元 double*從指定地址向后尋找8字節(jié)作為變量的存儲單元
1.void指針是一種特別的指針 void *vp //說它特別是因為它沒有類型 //或者說這個類型不能判斷出指向?qū)ο蟮拈L度
2.任何指針都可以賦值給void指針 type *p; vp=p; //不需轉(zhuǎn)換 //只獲得變量/對象地址而不獲得大小
3.void指針賦值給其他類型的指針時都要進行轉(zhuǎn)換 type *p=(type*)vp; //轉(zhuǎn)換類型也就是獲得指向變量/對象大小 轉(zhuǎn):http://icoding.spaces.live.com/blog/cns!209684E38D520BA6!130.entry
4.void指針不能復引用 *vp//錯誤 因為void指針只知道,指向變量/對象的起始地址 而不知道指向變量/對象的大小(占幾個字節(jié))所以無法正確引用
5.void指針不能參與指針運算,除非進行轉(zhuǎn)換 (type*)vp++; //vp==vp+sizeof(type)
#include<iostream> #include<stdlib.h> #include<string> using namespace std; typedef struct tag_st { char id[10]; float fa[2]; }ST; //我在程序里面這樣使用的 int main() { ST * P=(ST *)malloc(sizeof(ST)); strcpy(P->id,"hello!"); P->fa[0]=1.1; P->fa[1]=2.1;
ST * Q=(ST *)malloc(sizeof(ST)); strcpy(Q->id,"world!"); Q->fa[0]=3.1; Q->fa[1]=4.1; void ** plink=(void **)P; *((ST *)(plink)) = * Q; //plink要先強制轉(zhuǎn)換一下,目的是為了讓它先知道要覆蓋的大小. //P的內(nèi)容竟然給Q的內(nèi)容覆蓋掉了. cout<<P->id<<" "<<P->fa[0]<<" "<<P->fa[1]<<endl; return 0; }
評論:
-
# re: void指針
Posted @ 2009-07-12 08:17
寫得不錯,總結(jié)得也還好, 回復 更多評論
-
# re: void指針
Posted @ 2009-09-17 17:07
為什么是 void ** plink=(void **)P;
void ** plink= P; 不行嗎?不是任何類型都可以直接付給void指針嗎?
回復 更多評論
-
# re: void指針
Posted @ 2009-09-17 17:16
void ** plink=(void **)P;
為什么要二級指針?
void * plink=(void *)P; 不行嗎? 回復 更多評論
-
# re: void指針
Posted @ 2009-09-17 17:18
如果要用二級指針的話,應該是
void ** plink=&p ; 回復 更多評論
-
# re: void指針
Posted @ 2009-10-21 11:15
為什么要用二級指針啊?void * plink=(void *)P; 也是行的啊! 回復 更多評論
-
# re: void指針
Posted @ 2009-11-10 15:59
void * plink=P; 就已經(jīng)可以了 回復 更多評論
-
# re: void指針
Posted @ 2010-03-02 14:26
@yulai_li 不需要二級指針的。 回復 更多評論
|