在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

電子發燒友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;

  (2)char*ptr;

  (3)int**ptr;

  (4)int(*ptr)[3];

  (5)int*(*ptr)[4];

  1.指針的類型

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

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

  個指針的類型:

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

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

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

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

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

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

  2.指針所指向的類型

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

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

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

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

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

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

  (3)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涂鴉各WiFi模塊原理圖加PCB封裝
  2. 11.75 MB   |  76次下載  |  1 積分
  3. 2錦銳科技CA51F2 SDK開發包
  4. 24.06 MB   |  29次下載  |  1 積分
  5. 3錦銳CA51F005 SDK開發包
  6. 19.47 MB   |  3次下載  |  1 積分
  7. 4蘋果iphone 11電路原理圖
  8. 4.98 MB   |  3次下載  |  2 積分
  9. 5基礎模擬電子電路
  10. 3.80 MB   |  3次下載  |  1 積分
  11. 6RA-Eco-RA6M4-100PIN-V1.0開發板資料
  12. 34.89 MB  |  1次下載  |  免費
  13. 7STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4編程手冊
  14. 3.32 MB   |  1次下載  |  免費
  15. 8聯想A820t手機維修圖紙包括主板原理圖 尾板原理圖 點位圖
  16. 0.62 MB   |  次下載  |  5 積分

本月

  1. 1AI智能眼鏡產業鏈分析
  2. 4.43 MB   |  383次下載  |  免費
  3. 2蘇泊爾電磁爐線路的電路原理圖資料合集
  4. 2.02 MB   |  296次下載  |  5 積分
  5. 3貼片三極管上的印字與真實名稱的對照表詳細說明
  6. 0.50 MB   |  94次下載  |  1 積分
  7. 4長虹液晶電視R-HS310B-5HF01的電源板電路原理圖
  8. 0.46 MB   |  91次下載  |  5 積分
  9. 5涂鴉各WiFi模塊原理圖加PCB封裝
  10. 11.75 MB   |  76次下載  |  1 積分
  11. 6錦銳科技CA51F2 SDK開發包
  12. 24.06 MB   |  29次下載  |  1 積分
  13. 7AO4803A雙P通道增強型場效應晶體管的數據手冊
  14. 0.11 MB   |  28次下載  |  2 積分
  15. 8長虹液晶彩電LS29機芯的技術資料說明
  16. 3.42 MB   |  16次下載  |  2 積分

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935127次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
  4. 1.48MB  |  420064次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233089次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191388次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183342次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81588次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73815次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65988次下載  |  10 積分
主站蜘蛛池模板: 高h 男男| 种子在线搜索 | 888米奇在线视频四色 | 一级特色黄大片 | 日本片巨大的乳456线观看 | 欧美亚洲视频一区 | 国产美女一级视频 | 美女黄色在线看 | 男女交性拍拍拍高清视频 | 日本不卡视频在线视频观看 | 美女扒开尿口让男人桶 | 亚洲成av人影片在线观看 | 长腿丝袜美女被啪啪 | 天天澡天天摸天天添视频 | 日本视频三区 | 黑人一区二区三区中文字幕 | 种子 在线播放 | 九色视频网站 | 日产精品卡二卡三卡四卡乱码视频 | 国产精品国产三级国产普通话对白 | 国产在线高清精品二区色五郎 | 你懂得福利 | 国产成人乱码一区二区三区 | 手机看片久久青草福利盒子 | 欧美51| 天堂中文字幕在线观看 | 免费视频在线看 | 美女大黄三级视频在线观看 | h视频在线观看网站 | 嫩草影院地址一地址二 | 人人添| 国产色丁香久久综合 | 天天操天天干天天干 | 女色专区 | 人人入人人爱 | 婷婷99视频精品全部在线观看 | 天天爽天天干 | 福利片在线观看免费高清 | 中文天堂最新版资源新版天堂资源 | 日韩中文字幕第一页 | 欧美午夜视频一区二区三区 |