亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C++中指針的使用藝術

2019-11-17 05:17:10
字體:
來源:轉載
供稿:網友
  在C++編程中使用指針能有速度快,節約內存等優點,是很多C++程序員的最愛。但指針是一把雙刃劍,用好了它,你就會發現指針有多么的方便,反之,你可能就頭疼了,往往會出現意想不到的問題。

  一.什么是指針:

  其實指針就像是其它變量一樣,所不同的是一般的變量包含的是實際的真實的數據,而指針只是一個指示器,它告訴程序在內存的哪塊區域可以找到數據。

  這是一個非常重要的概念,有很多程序和算法都是圍繞指針設計的,如鏈表、遍歷等。

  指針是一個數據類型,本身也需要占用四個字節的存儲空間。所以用sizeof(void*)獲得的值為4。

  二.指針的定義

  看如下的例子:

int *pNumber;

  這樣就定義了int類型的指針。

  指針變量名稱以p為首字符,這是程序員通常在定義指針時的一個習慣,以提高便程序的閱讀性,表示這是個指針。另外,雖然int* pNumber和int *pNumber是相同的,但是使用后一種的編程風格更好一些。比如:

int *pNumber1,*pNumber2;表示定義兩個指針,*號和變量靠近;反之,我們可能會定義成int* pNumber1,pNumber2,這將是一個錯誤的定義,pNumber2就不是指針了。

  三.指針的優點

  a.為函數提供修改調用變元的手段;

  b.支持C++動態分配子程序

  c.可以改善某些子程序的效率

  d.為動態數據結構(如二叉樹、鏈表)提供支持

  四、指針賦值及轉換:

  a.同類型直接賦值,異類型要進行轉換。

  b.強制轉換:可以把表達式結果硬性轉換為指定類型

  c.char * p;(int *)p 把p強制轉換為int型,記住轉換過程中要注重兩個類型的大小,大轉小時可能會有數據丟失(如int到double)

  d.涉及void *的:

  c 中void *類型可賦值給任何類型的指針,反之亦然

  c++ 中都需要強制轉換

  void * 可看作無窮大能接納任何類型賦值,反之不行int * p =9;void * t= p(正確);p=t(錯誤)

  e.不涉及void *的都要強制轉換

  五.指針和數組

  不帶下標的數組名返回數組的起始地址,即數組首元素的地址,所以對數組的訪問可有兩種方式:數組下標和指針算術。例如:

char* pChar;

char chs[100];

pChar = chs;這樣pChar就指向chs數組的首地址。

  六.數組與引用

  a.引用只是變量的別名,而不是指向變量的指針(區別于取址運算符"&")不占內存空間,對變量引用的改變其相應的變量也會改變。
  b.不能對引用使用指針間接運算符“*”進行復引用操作

  c.引用必須在聲明時初始化 int &c = count;(c是count的別名)

  七.指針空間的動態分配與回收

  動態分配是指針的要害技術。它是用來在不必定義變量的情況下分配內存和讓指針去指向它們。分配了內存,別忘了回收。你動態地分配了一個內存空間,可它絕不會被自動刪除。也就是說,這塊內存空間會一直存在,直到你告訴電腦你已經使用完了??山Y果是,你并沒有告訴電腦你已不再需要這塊內存空間了,所以它會繼續占據著內存空間造成浪費,甚至你的程序運行完畢,其它程序運行時它還存在。當這樣的問題積累到一定程度,最終將導致系統崩潰。所以這是很重要的,在你用完它以后,請釋放它的空間。

  八.實際使用指針時,輕易出現的錯誤

  筆者歸納出指針錯誤的原因有以下幾點(個人經驗,歡迎大家補充):

  1.指針未初始化。

  指針的初始化,不是指指針的定義,而是指針變量存儲的數值是個無效的數值。比如定義float a;這個a會分配一個地址,但初始值是一個亂七八糟的數據。同樣,float *a;也會為a分配一個地址,初始值也是亂七八糟的數據。初始化可以將a = NULL,這樣在以后的程序中可以增加if(a == NULL)來判定指針是否有效,否則不行?;蛘邽橹羔樂峙浠蛘咧付臻g。如 float *a = new float;或者float b; float *a = &b;都可以為指針指向一塊內存以實現初始化。

  2.指針越界

  指針越界是個比較難以捕捉的錯誤。假如測試不全面,不輕易被發現。對于為指針分配的空間大小,程序員一定要時刻注重。

  3.指向局部變量的指針

  指針是記錄某塊內存起始地址的變量,要使指針有效,則必須確保這塊內存有效。用new分配的內存空間,只要不delete,則一直有效。但是對于指向某個變量地址的指針,程序員必須清楚該變量的作用域。假如離開了變量的作用域,該變量的內存空間就會被系統自動回收,再使用指針時,將會發生錯誤。這是程序中最輕易出現的錯誤。

  4.指針指向的轉移

  有些初涉C++的程序員,經常會寫出這樣的程序:

char *pChar = new char;

char chs;

pChar = &chs;

delete pChar;

  他們的目的是想將chs內容傳遞給pChar指針指向的內存。但這樣寫,將會使pChar先前指向的空間編程垃圾地址,因為地址無法再獲取了。俗稱野指針。將會導致內存泄漏。而且,在調用delete pChar時,也會發生異常錯誤。因為不是new的空間是不能使用delete刪除的。因為pChar已經轉到指向chs這個變量的地址了。

  指針的藝術遠不止這些,留待我們的愛好者進行深入的探討。指針給我們的程序帶來了太多的方便,同樣,它也有很多難以控制的問題。如何更好的駕馭指針,可以說是C++程序員提高自己的一個手段。

  『注』本文參考了博客網的C++入門筆記,綜合了筆者自己對指針的理解。







發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲自拍高清视频网站| 日本一区二三区好的精华液| 久久免费精品日本久久中文字幕| 亚洲天堂av图片| 亚洲天堂av高清| 久久久久久中文字幕| 深夜福利一区二区| 成人黄色短视频在线观看| 亚洲综合中文字幕在线| 成人久久一区二区三区| 国产精品99久久久久久www| 国产日韩欧美在线| 精品成人乱色一区二区| 亚洲激情视频在线| 亚洲第一av网| 91精品免费久久久久久久久| 欧美自拍视频在线观看| 午夜精品久久久久久99热| 国产日韩在线亚洲字幕中文| 中文字幕精品在线视频| 日本精品免费一区二区三区| 国产亚洲一区二区精品| 亚洲精品日韩在线| 久久亚洲欧美日韩精品专区| 亚洲国产成人精品电影| 欧美视频免费在线观看| 精品久久久久久久大神国产| 欧美孕妇孕交黑巨大网站| 日韩av在线免播放器| 91夜夜揉人人捏人人添红杏| 欧美午夜精品久久久久久人妖| 久久久电影免费观看完整版| 欧美日韩国产中字| 亚洲一区二区三区视频| 欧美人与性动交| 国产一区二区三区网站| 亚洲精品在线观看www| 日韩中文字幕免费| 日日噜噜噜夜夜爽亚洲精品| 日韩欧美精品免费在线| 亚洲www在线观看| 亚洲成人教育av| 欧美国产日产韩国视频| 91成人在线观看国产| 亚洲成在人线av| y97精品国产97久久久久久| 亚洲人成电影网| 国产精品27p| 亚洲欧美日韩一区二区三区在线| 亚洲精品之草原avav久久| 免费99精品国产自在在线| 欧美性猛交xxxx免费看久久久| 一区二区三区精品99久久| 国产一区香蕉久久| 日本韩国在线不卡| 久久精品电影网站| 国产一区二区三区在线视频| 情事1991在线| 亚洲精品视频中文字幕| 成人午夜高潮视频| 亚洲图片欧洲图片av| 国产一区二区三区三区在线观看| 亚洲欧美激情精品一区二区| 久久亚洲精品中文字幕冲田杏梨| 日韩欧美成人精品| 精品久久中文字幕久久av| 国产精品久久久久秋霞鲁丝| 亚洲欧美日本伦理| 国产亚洲精品美女久久久久| 国产精品久久久久久久午夜| 爱福利视频一区| 久久久免费观看| 久久亚洲国产成人| 亚洲福利视频二区| 国产亚洲欧美视频| 美女啪啪无遮挡免费久久网站| 久久精品亚洲热| 成人在线视频网站| 亚洲激情视频在线播放| 91日韩在线视频| 国产成人综合精品| 亚洲欧美一区二区三区四区| 欧美精品videos另类日本| 欧美风情在线观看| 精品国产欧美一区二区五十路| www.欧美免费| 国产精品国产自产拍高清av水多| 国产视频999| 国产成人精品免高潮在线观看| 91在线国产电影| 国产一区二区激情| 97国产精品人人爽人人做| 成人午夜黄色影院| 亚洲欧洲日产国码av系列天堂| 日韩经典中文字幕在线观看| 俺去了亚洲欧美日韩| 国产精品美女www爽爽爽视频| 欧美老女人xx| 中文字幕精品国产| 国产精品亚洲精品| 亚洲国产精品人人爽夜夜爽| 神马久久桃色视频| 国产成人精品日本亚洲| 国产亚洲欧洲在线| 国产成人精品在线播放| 国产不卡在线观看| 国产视频999| 日本高清视频一区| 日韩高清有码在线| 日韩福利伦理影院免费| 国产精品白嫩初高中害羞小美女| 亚洲free性xxxx护士hd| 高清亚洲成在人网站天堂| 日韩精品视频在线播放| 激情成人在线视频| 国产免费一区视频观看免费| 日韩在线一区二区三区免费视频| 成人疯狂猛交xxx| 欧美精品videos| 中文字幕日韩在线视频| 欧美视频13p| 久久99久久99精品免观看粉嫩| 精品久久久久久电影| www.久久久久久.com| 日韩欧美在线视频日韩欧美在线视频| 麻豆精品精华液| 国产精品久久久久久一区二区| 欧美亚洲国产成人精品| 国产精品白嫩美女在线观看| 日韩欧美精品中文字幕| 日韩综合视频在线观看| 欧美乱大交xxxxx另类电影| 欧美日本亚洲视频| 欧美高清性猛交| 欧美成年人网站| 国产精品99久久久久久久久久久久| 久久久久久噜噜噜久久久精品| 亚洲日韩中文字幕| 亚洲天天在线日亚洲洲精| 欧美日韩一区二区免费视频| 国产精品美女www爽爽爽视频| 久久精品视频播放| 日韩精品在线观看一区二区| 亚洲免费视频在线观看| 97香蕉超级碰碰久久免费软件| 91最新在线免费观看| 日韩中文在线中文网在线观看| 国产丝袜一区视频在线观看| 欧洲成人免费视频| 2021久久精品国产99国产精品| 一本色道久久88综合亚洲精品ⅰ| 日韩电影中文字幕在线| 国产中文字幕91| 97在线观看视频| 国产精品国语对白| 欧美性生活大片免费观看网址| 日本亚洲欧洲色| 亚洲综合大片69999| 国产精品久久999| 51久久精品夜色国产麻豆| 九九久久久久99精品| 精品国内产的精品视频在线观看| www.久久草.com| 成人免费视频网|