吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

為什么使用指針?C++中的“指針”

SwM2_ChinaAET ? 來源:未知 ? 作者:李倩 ? 2018-10-04 10:33 ? 次閱讀

指針是用來保存內存地址的變量。每個被定義的變量都有自己的地址,可以用指針來存放任何被定義的變量的地址。如(p存放的是變量的地址,*p存放的是變量的數據。):

inta;//定義一個整型變量a int*p;//定義一個指向整型變量的指針p p=&a;//將變量a的地址賦給變量p

定義一個指針后一定要用它保存一個內存地址,如果不那么做的話,那么該指針就是一個失控指針,它可以指向任何地址,并且對該地址的數值進行修改或者刪除,可能會造成意想不到的后果。所以,可以將指針初始化為0,如:

int*p;p=0;或者int*p=0;

由于不同類型的變量在內存中所占用的字節不同,而指針又是用來保存內存地址的變量,因此指針只能存儲與它類型相同的變量的地址。

注意區分指針地址、指針保存的地址和該地址的值,如:

inta=1; int*p=&a; cout<

為什么使用指針?因為在操作大型數據和類時,指針可以通過內存地址直接訪問數據,可避免在程序中復制大量的代碼,因此指針的效率最高。一般來說,指針會有3大用途:

(1)處理堆中存放的大型數據;

(2)快速訪問類的成員數據和函數;

(3)以別名的方式向函數傳遞參數

如何使用堆?首先創建一個堆,然后定義一個指向該堆的指針,最后通過該指針就可以訪問堆中的數據。在C++中使用關鍵字new創建一個堆并分配內存,在new后面跟一個要分配的對象類型,編譯器根據這個類型來分配內存。如:

int*p;p=newint;或int*p=newint;//分配了四個字節的內存空間

由于使用new創建的內存空間不會被系統自動釋放,因此假如不去釋放它,那么該區域的內存將始終不能為其他數據所使用,而指向該內存的指針是個局部變量,當定義該指針的函數結束并返回時,指針也就消失了,從而再也找不到這塊內存區域,這種情況叫做內存泄漏。因此,當不需要一塊內存空間,可以使用關鍵字delete釋放該內存空間(不要再次對該指針進行刪除,因為它所指向的內存區域已經被釋放,如果再進行釋放,將會使程序崩潰。但是,如果將該指針賦為0的話,那么刪除一個指針是安全的。),但不會釋放該指針,指針可以繼續使用。另外,當用delete釋放一個指針所指向的空間后,最好將該指針的內存地址清0。如:

int*p=newint; deletep; p=0;

還可以在堆中創建對象(創建對象時會自動調用類的構造函數來初始化對象的成員數據),如下,定義了一個Human類的指針p,指向new創建的內存空間。占用內存大小由Human類對象的成員變量來決定。

Human*p;p=newHuman;或Human*p=newHuman;

如果要刪除在堆中創建的對象,可以直接刪除指向該對象的指針,這樣會自動調用對象的析構函數來銷毀該對象,同時釋放內存。

可以通過指針變量訪問堆中創建的對象,如下,其中->是成員指針運算符,利用該符號可以實現讀取對象的內存地址并且訪問該對象的成員的作用。

(*p).get();或p->get();

指針可以進行加減操作,如下,定義了一個指針并指向int型變量,執行加1操作,會將原來的內存地址增加4個字節;執行減1操作,會將原來的內存地址減少4個字節。

int*p=newint; p++; p--;

常量指針是指該指針不可改變,但其指向的數據可改變,如下:

int*constp;

指向常量的指針是指該指針可改變,但其指向的數據不可改變,如下:

constint*p;

指向常量的常指針是指該指針不可變,其指向的數據也不可變,如下:

constint*constp;

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 指針
    +關注

    關注

    1

    文章

    481

    瀏覽量

    70609
  • C++
    C++
    +關注

    關注

    22

    文章

    2114

    瀏覽量

    73857
  • 編譯器
    +關注

    關注

    1

    文章

    1642

    瀏覽量

    49286

原文標題:【博文連載】C++中的“指針”

文章出處:【微信號:ChinaAET,微信公眾號:電子技術應用ChinaAET】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    淺談C/C++里的指針

    指針CC++的難點和重點。指針C的靈魂。我不想重復大多數書上說得很清楚的東西,只是把我看
    發表于 06-28 10:21 ?444次閱讀

    關于C++函數指針的使用

    關于C++函數指針的使用(包含對typedef用法的討論) (一)簡單的函數指針的應用。 //形式1:返回類型(*函數名)(參數表) char (*pFun)(int); c
    發表于 07-13 03:51

    C指針_CC++經典著作

    C指針_CC++經典著作,感興趣的小伙伴們可以瞧一瞧。
    發表于 11-16 18:32 ?0次下載

    C++實驗--指針

    C++實驗--指針
    發表于 12-30 14:50 ?1次下載

    C++指針”學習建議

    C++指針”學習建議
    發表于 03-31 15:53 ?3次下載

    C指針習題答案配C指針

    C指針習題答案配C指針
    發表于 09-07 14:29 ?6次下載
    <b class='flag-5'>C</b>和<b class='flag-5'>指針</b>習題答案配<b class='flag-5'>C</b>和<b class='flag-5'>指針</b>

    C++程序設計教程之指針的詳細資料說明

    本文檔詳細介紹的是C++程序設計教程之指針的詳細資料說明主要內容包括了:1. 指針的概念,2. 變量與指針,3. 數組與指針,4. 字符串與
    發表于 03-14 16:04 ?7次下載
    <b class='flag-5'>C++</b>程序設計教程之<b class='flag-5'>指針</b>的詳細資料說明

    C++指針的學習建議

     一。對于眾多人提出的c/c++指針難學的問題做個總結:
    發表于 11-07 17:13 ?8次下載
    <b class='flag-5'>C++</b><b class='flag-5'>指針</b>的學習建議

    C++封裝:this指針

    C++封裝:this指針
    的頭像 發表于 06-29 14:37 ?3514次閱讀
    <b class='flag-5'>C++</b>封裝:this<b class='flag-5'>指針</b>

    C++const以及this指針的使用

    const 作用 修飾變量,說明該變量不可以被改變; 修飾指針,分為指向常量的指針(pointer to const)和自身是常量的指針(常量指針,const pointer); 修飾
    的頭像 發表于 09-23 11:39 ?2064次閱讀

    CC++經典著作《C指針

    CC++經典著作《C指針
    發表于 01-17 09:46 ?0次下載

    C語言中的懸空指針和野指針是什么意思?

    提起C語言大部分開發者很自然就會想到指針二字,沒錯,作為C的核心和靈魂,它的地位咱們就不再贅述了,今天我們想跟大家講的是指針的兩個特有名詞
    的頭像 發表于 02-09 17:20 ?1148次閱讀

    C++中有函數指針還需要std::function嘛

    C/C++可以使用指針指向一段代碼,這個指針就叫函數指針,假設有這樣一段代碼:
    的頭像 發表于 02-15 14:13 ?546次閱讀
    <b class='flag-5'>C++</b>中有函數<b class='flag-5'>指針</b>還需要std::function嘛

    C++的引用和指針

    之前的文章我們已經介紹了C++的基本類型如int,bool和double等,除了基本類型C++還有一些更復雜的數據類型復合類型,所謂的復合類型就是通過其他類型定義的類型,本篇文章我們將會著重介紹
    的頭像 發表于 03-17 14:00 ?679次閱讀

    C++智能指針的底層實現原理

    C++智能指針的頭文件: #include 1. shared_ptr: 智能指針從本質上來說是一個模板類,用類實現對指針對象的管理。 template class shared_pt
    的頭像 發表于 11-09 14:32 ?792次閱讀
    <b class='flag-5'>C++</b>智能<b class='flag-5'>指針</b>的底層實現原理
    百家乐官网网址| 电子百家乐官网假在线哪| 易赢百家乐软件| 瑞士百家乐的玩法技巧和规则 | 百家乐官网庄家必赢诀窍| 大发888登陆网页游戏| 属狗与属龙做生意好吗| 百家乐官网代理占成| 劳力士百家乐的玩法技巧和规则 | 太阳城百家乐筹码租| 澳门百家乐官网单注下限| 威尼斯人娱乐场网站| 百家乐官网平预测软件| 大发888洗码| 伟博百家乐现金网| 西安市| 澳门百家乐游戏说明书| 百家乐官网网站平台| 在线玩轮盘| 百家乐官| 百家乐官网的出牌技巧| 最新博彩论坛| 赌场百家乐的玩法技巧和规则| 加州百家乐官网的玩法技巧和规则| 在线百家乐| 亚洲百家乐的玩法技巧和规则 | 百家乐官网天天乐娱乐场| bet365提款要多久| 百家乐园36bol在线| 威斯汀百家乐官网的玩法技巧和规则 | 新全讯网3| 百家乐最佳公式| 百家乐官网软件稳赚| 足球百家乐投注网出租| 机械手百家乐官网的玩法技巧和规则 | 永利高百家乐官网网址| 大发888大发888官方| 尊龙百家乐娱乐网| 百家乐官网娱乐城体验金| VIP百家乐官网-挤牌卡安桌板| 大发线上娱乐|