色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發燒友App

硬聲App

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

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

3天內不再提示
電子發燒友網>電子資料下載>C語言|源代碼>C語言和C++指針的應用詳解

C語言和C++指針的應用詳解

2019-11-12 | rar | 0.07 MB | 次下載 | 免費

資料介紹

  C++指針應用詳解

  要了解指針,多多少少會出現一些比較復雜的類型,所以我先介紹一下如何完全理解一個復雜類型,要理解復雜類型其實很簡單,一個類型里會出現很多運算符,他們也像普通的表達式一樣,有優先級,其優先級和運算優先級一樣,所以我總結了一下其原則:

?

  從變量名處起,根據運算符優先級結合,一步一步分析。

  下面讓我們先從簡單的類型開始慢慢分析吧:

  int p; //這是一個普通的整型變量

  int *p; //首先從P 處開始,先與*結合,所以說明P 是一個指針,然后再與int 結合,說明指針所指向的內容的類型為int 型。所以P 是一個返回整型數據的指針

  int p[3]; //首先從P 處開始,先與[]結合,說明P 是一個數組,然后與int 結合,說明數組里的元素是整型的,所以P 是一個由整型數據組成的數組

  int *p[3]; //首先從P 處開始,先與[]結合,因為其優先級比*高,所以P 是一個數組,然后再與*結合,說明數組里的元素是指針類型,然后再與int 結合,說明指針所指向的內容的類型是整型的,所以P 是一個由返回整型數據的指針所組成的數組

  int (*p)[3]; //首先從P 處開始,先與*結合,說明P 是一個指針

  //然后再與[]結合(與“()”這步可以忽略,只是為

  //了改變優先級),說明指針所指向的內容是一個

  //數組,然后再與int 結合,說明數組里的元素是

  //整型的。所以P 是一個指向由整型數據組成的數

  //組的指針

  int **p; //首先從P 開始,先與*結合,說是P 是一個指針,然

  //后再與*結合,說明指針所指向的元素是指針,然

  //后再與int 結合,說明該指針所指向的元素是整

  //型數據。由于二級指針以及更高級的指針極少用

  //在復雜的類型中,所以后面更復雜的類型我們就

  //不考慮多級指針了,最多只考慮一級指針。

  int p(int); //從P 處起,先與()結合,說明P 是一個函數,然后進入

  //()里分析,說明該函數有一個整型變量的參數

  //然后再與外面的int 結合,說明函數的返回值是

  //一個整型數據

  Int (*p)(int); //從P 處開始,先與指針結合,說明P 是一個指針,然后與

  //()結合,說明指針指向的是一個函數,然后再與()里的

  //int 結合,說明函數有一個int 型的參數,再與最外層的

  //int 結合,說明函數的返回類型是整型,所以P 是一個指

  //向有一個整型參數且返回類型為整型的函數的指針

  int *(*p(int))[3]; //可以先跳過,不看這個類型,過于復雜

  //從P 開始,先與()結合,說明P 是一個函數,然后進

  //入()里面,與int 結合,說明函數有一個整型變量

  //參數,然后再與外面的*結合,說明函數返回的是

  //一個指針,,然后到最外面一層,先與[]結合,說明

  //返回的指針指向的是一個數組,然后再與*結合,說

  //明數組里的元素是指針,然后再與int 結合,說明指

  //針指向的內容是整型數據。所以P 是一個參數為一個

  //整數據且返回一個指向由整型指針變量組成的數組

  //的指針變量的函數。

  說到這里也就差不多了,我們的任務也就這么多,理解了這幾個類型,其它

  的類型對我們來說也是小菜了,不過我們一般不會用太復雜的類型,那樣會

  大大減小程序的可讀性,請慎用,這上面的幾種類型已經足夠我們用了。

  1、細說指針

  指針是一個特殊的變量,它里面存儲的數值被解釋成為內存里的一個地址。

  要搞清一個指針需要搞清指針的四方面的內容:指針的類型、指針所指向的

  類型、指針的值或者叫指針所指向的內存區、指針本身所占據的內存區。讓

  我們分別說明。

  先聲明幾個指針放著做例子:

  例一:

  (1)int*ptr;

 ?。?)char*ptr;

 ?。?)int**ptr;

 ?。?)int(*ptr)[3];

 ?。?)int*(*ptr)[4];

  1.指針的類型

  從語法的角度看,你只要把指針聲明語句里的指針名字去掉,剩下的部

  分就是這個指針的類型。這是指針本身所具有的類型。讓我們看看例一中各

  個指針的類型:

 ?。?)int*ptr;//指針的類型是int*

  (2)char*ptr;//指針的類型是char*

 ?。?)int**ptr;//指針的類型是int**

  (4)int(*ptr)[3];//指針的類型是int(*)[3]

 ?。?)int*(*ptr)[4];//指針的類型是int*(*)[4]

  怎么樣?找出指針的類型的方法是不是很簡單?

  2.指針所指向的類型

  當你通過指針來訪問指針所指向的內存區時,指針所指向的類型決定了

  編譯器將把那片內存區里的內容當做什么來看待。

  從語法上看,你只須把指針聲明語句中的指針名字和名字左邊的指針聲

  明符*去掉,剩下的就是指針所指向的類型。例如:

  (1)int*ptr; //指針所指向的類型是int

  (2)char*ptr; //指針所指向的的類型是char

 ?。?)int**ptr; //指針所指向的的類型是int*

  (4)int(*ptr)[3]; //指針所指向的的類型是int()[3]

  (5)int*(*ptr)[4]; //指針所指向的的類型是int*()[4]

  在指針的算術運算中,指針所指向的類型有很大的作用。

  指針的類型(即指針本身的類型)和指針所指向的類型是兩個概念。當你

  對C 越來越熟悉時,你會發現,把與指針攪和在一起的“類型”這個概念分成

  “指針的類型”和“指針所指向的類型”兩個概念,是精通指針的關鍵點之一。

  我看了不少書,發現有些寫得差的書中,就把指針的這兩個概念攪在一起了,

  所以看起書來前后矛盾,越看越糊涂。

  3.指針的值----或者叫指針所指向的內存區或地址

  指針的值是指針本身存儲的數值,這個值將被編譯器當作一個地址,而

  不是一個一般的數值。在32 位程序里,所有類型的指針的值都是一個32 位

  整數,因為32 位程序里內存地址全都是32 位長。指針所指向的內存區就

  是從指針的值所代表的那個內存地址開始,長度為si zeof(指針所指向的類

  型)的一片內存區。以后,我們說一個指針的值是XX,就相當于說該指針指

  向了以XX 為首地址的一片內存區域;我們說一個指針指向了某塊內存區域,

  就相當于說該指針的值是這塊內存區域的首地址。

  指針所指向的內存區和指針所指向的類型是兩個完全不同的概念。在例

  一中,指針所指向的類型已經有了,但由于指針還未初始化,所以它所指向

  的內存區是不存在的,或者說是無意義的。

  以后,每遇到一個指針,都應該問問:這個指針的類型是什么?指針指

  的類型是什么?該指針指向了哪里?(重點注意)

  4 指針本身所占據的內存區

  指針本身占了多大的內存?你只要用函數sizeof(指針的類型)測一下

  就知道了。在32 位平臺里,指針本身占據了4 個字節的長度。

  指針本身占據的內存這個概念在判斷一個指針表達式(后面會解釋)是

  否是左值時很有用。

  2、指針的算術運算

  指針可以加上或減去一個整數。指針的這種運算的意義和通常的數值的加減

  運算的意義是不一樣的,以單元為單位。例如:

  例二:

  char a[20];

  int *ptr=(int *)a; //強制類型轉換并不會改變a 的類型

  ptr++;

  在上例中,指針ptr 的類型是int*,它指向的類型是int,它被初始化

  為指向整型變量a。接下來的第3 句中,指針ptr 被加了1,編譯器是這樣

  處理的:它把指針ptr 的值加上了sizeof(int),在32 位程序中,是被加上

  了4,因為在32 位程序中,int 占4 個字節。由于地址是用字節做單位的,

  故ptr 所指向的地址由原來的變量a 的地址向高地址方向增加了4 個字節。

  由于char 類型的長度是一個字節,所以,原來ptr 是指向數組a 的第0 號

  單元開始的四個字節,此時指向了數組a 中從第4 號單元開始的四個字節。

  我們可以用一個指針和一個循環來遍歷一個數組,看例子:

  例三:

  int array[20]={0};

  int *ptr=array;

  for(i=0;i《20;i++)

  {

 ?。?ptr)++;

  ptr++;

  }

  這個例子將整型數組中各個單元的值加1。由于每次循環都將指針ptr

  加1 個單元,所以每次循環都能訪問數組的下一個單元。

  再看例子:

  例四:

  char a[20]=“You_are_a_girl”;

  int *ptr=(int *)a;

  ptr+=5;

  在這個例子中,ptr 被加上了5,編譯器是這樣處理的:將指針ptr 的

  值加上5 乘sizeof(int),在32 位程序中就是加上了5 乘4=20。由于地址

  的單位是字節,故現在的ptr 所指向的地址比起加5 后的ptr 所指向的地址

  來說,向高地址方向移動了20 個字節。在這個例子中,沒加5 前的ptr 指

  向數組a 的第0 號單元開始的四個字節,加5 后,ptr 已經指向了數組a 的

  合法范圍之外了。雖然這種情況在應用上會出問題,但在語法上卻是可以的。

  這也體現出了指針的靈活性。

  如果上例中,ptr 是被減去5,那么處理過程大同小異,只不過ptr 的

  值是被減去5 乘sizeof(int),新的ptr 指向的地址將比原來的ptr 所指向

  的地址向低地址方向移動了20 個字節。

  下面請允許我再舉一個例子:(一個誤區)

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1電子電路原理第七版PDF電子教材免費下載
  2. 0.00 MB  |  1490次下載  |  免費
  3. 2單片機典型實例介紹
  4. 18.19 MB  |  92次下載  |  1 積分
  5. 3S7-200PLC編程實例詳細資料
  6. 1.17 MB  |  27次下載  |  1 積分
  7. 4筆記本電腦主板的元件識別和講解說明
  8. 4.28 MB  |  18次下載  |  4 積分
  9. 5開關電源原理及各功能電路詳解
  10. 0.38 MB  |  10次下載  |  免費
  11. 6基于AT89C2051/4051單片機編程器的實驗
  12. 0.11 MB  |  4次下載  |  免費
  13. 7藍牙設備在嵌入式領域的廣泛應用
  14. 0.63 MB  |  3次下載  |  免費
  15. 89天練會電子電路識圖
  16. 5.91 MB  |  3次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234313次下載  |  免費
  3. 2PADS 9.0 2009最新版 -下載
  4. 0.00 MB  |  66304次下載  |  免費
  5. 3protel99下載protel99軟件下載(中文版)
  6. 0.00 MB  |  51209次下載  |  免費
  7. 4LabView 8.0 專業版下載 (3CD完整版)
  8. 0.00 MB  |  51043次下載  |  免費
  9. 5555集成電路應用800例(新編版)
  10. 0.00 MB  |  33562次下載  |  免費
  11. 6接口電路圖大全
  12. 未知  |  30320次下載  |  免費
  13. 7Multisim 10下載Multisim 10 中文版
  14. 0.00 MB  |  28588次下載  |  免費
  15. 8開關電源設計實例指南
  16. 未知  |  21539次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935053次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537791次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234313次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233045次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191183次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183277次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138039次下載  |  免費
主站蜘蛛池模板: 九九热这里只有精品视频免费 | 含羞草最新版本 | 一级毛片两人添下面 | 国产成人小视频 | 色琪琪丁香婷婷综合久久 | 人妻熟妇乱又伦精品视频中文字幕 | 欧美大片免费 | 国产精品无码亚洲区艳妇 | 久久亚洲精品2017 | 国模丽丽啪啪一区二区 | 妖精视频在线观看高清 | 美女穿丝袜被狂躁动态图 | 久久久无码精品亚洲A片猫咪 | 伊人22222| 苍井空教师BD在线观看全集 | 蜜臀AV人妻久久无码精品麻豆 | 把腿张开老子CAO烂你动态图 | yellow免费影视大全 | 耻辱の奴隷淑女中文字幕 | 久久机热视频 这里只有精品首页 | 99热在线精品免费全部my | 色戒未删减版在线观看完整 | 2224x最新网站 | 神电影院午夜dy888我不卡 | 日日摸夜夜嗷嗷叫日日拍 | 欧美亚洲另类图片 | 亚洲精品6久久久久中文字幕 | 婷婷午夜影院 | 男人舔女人的阴部黄色骚虎视频 | 久久99综合国产精品亚洲首页 | 尤物国产在线精品三区 | 青草视频久久 | 男生jj插入女生jj | 国产乱色伦影片在线观看 | 亚洲专区区免费 | 国产亚洲一区在线 | 亚洲精品国产熟女久久久 | 伊人久久大香线蕉综合电影 | 中文字幕AV亚洲精品影视 | 色偷偷91综合久久噜噜 | 日本妈妈JMZZZZZ|