成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳細介紹C++中指針的使用

開發 后端
本文介紹的是C++中的指針的使用方法,希望對大家有幫助,一起來看。

C++編程中使用指針能有速度快,節約內存等優點,是很多C++程序員的***。但指針是一把雙刃劍,用好了它,你就會發現指針有多么的方便,反之,你可能就頭疼了,往往會出現意想不到的問題。

一.什么是指針:

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

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

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

二.指針的定義

看如下的例子:

 

  1. int *pNumber; 

 

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

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

 

  1. 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 *的都要強制轉換

五.指針和數組

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

 

  1. char* pChar;  
  2. char chs[100];  
  3. pChar = chs; 

 

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

六.數組與引用

a.引用只是變量的別名,而不是指向變量的指針(區別于取址運算符"&")不占內存空間,對變量引用的改變其相應的變量也會改變。

b.不能對引用使用指針間接運算符“*”進行復引用操作

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

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

動態分配是指針的關鍵技術。它是用來在不必定義變量的情況下分配內存和讓指針去指向它們。分配了內存,別忘了回收。你動態地分配了一個內存空間,可它絕不會被自動刪除。

也就是說,這塊內存空間會一直存在,直到你告訴電腦你已經使用完了。可結果是,你并沒有告訴電腦你已不再需要這塊內存空間了,所以它會繼續占據著內存空間造成浪費,甚至你的程序運行完畢,其它程序運行時它還存在。當這樣的問題積累到一定程度,最終將導致系統崩潰。所以這是很重要的,在你用完它以后,請釋放它的空間。

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

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

1.指針未初始化。

指針的初始化,不是指指針的定義,而是指針變量存儲的數值是個無效的數值。比如定義float a;這個a會分配一個地址,但初始值是一個亂七八糟的數據。同樣,float *a;也會為a分配一個地址,初始值也是亂七八糟的數據。初始化可以將a = NULL,這樣在以后的程序中可以增加if(a == NULL)來判斷指針是否有效,否則不行。或者為指針分配或者指定空間。如

  1. float *a = new float;  
  2. 或者  
  3. float b;   
  4. float *a = &b; 

 

都可以為指針指向一塊內存以實現初始化。

2.指針越界

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

3.指向局部變量的指針

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

4.指針指向的轉移

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

 

  1. char *pChar = new char;  
  2. char chs;  
  3. pChar = &chs;  
  4. delete pChar; 

 

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

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

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

責任編輯:于鐵 來源: 互聯網
相關推薦

2009-08-21 15:16:23

C#使用指針

2011-07-14 17:17:21

C++指針

2011-07-14 17:02:09

C++指針

2011-07-20 18:03:54

CC++

2010-02-01 10:22:51

C++數據指針

2010-02-02 15:01:59

C++成員函數指針

2011-07-15 01:20:58

C指針函數函數指針

2011-07-13 16:49:59

C++

2011-07-20 15:58:53

C++引用

2011-07-13 11:34:58

CC++時間函數

2011-07-20 13:57:06

C++STL

2015-05-13 10:37:58

C++指針與引用

2011-06-21 10:37:56

const

2011-07-14 16:26:01

2011-07-14 16:56:21

2011-07-14 23:27:05

C++引用

2010-01-11 09:56:07

C++編程實例

2011-07-13 11:12:43

C++MFC

2010-01-19 13:17:05

C++數據類型

2011-06-21 15:00:07

JAVAC++
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人av资源在线 | 91精品国产综合久久香蕉922 | 国产高清一区二区三区 | 国产美女久久 | 国产精品一二三区 | 伊人网站视频 | 99re视频在线| 国产高潮好爽受不了了夜色 | 免费特级黄毛片 | 亚洲高清av在线 | 精品国产一级 | 国产免费高清 | 欧美日韩一区二区三区四区 | 欧美一级特黄aaa大片在线观看 | 成人在线播放网站 | 精品国产一区二区在线 | 男人天堂国产 | 日韩精品久久久久 | 色综合成人网 | 日本中出视频 | 91麻豆精品国产91久久久更新资源速度超快 | 亚洲人a | 91av免费版| 日韩av三区 | 久久精品在线 | 久久精品视频在线观看 | 国产精品久久久久久久久久软件 | 国内精品久久久久久影视8 最新黄色在线观看 | 天天成人综合网 | 九九色综合| 国产精品久久国产精品99 gif | 国产1区在线 | 午夜精品一区二区三区在线 | 99国产精品99久久久久久粉嫩 | 性色网站 | 日韩伦理一区二区三区 | 国产三级一区二区三区 | 国产一区在线免费 | 综合一区二区三区 | 亚洲精品二区 | 亚洲综合视频 |