首页
/
每日頭條
/
圖文
/
c語言指針深度講解
c語言指針深度講解
更新时间:2024-09-30 22:27:21

c語言指針深度講解?指針為C語言中一種數據類型,它是一種用以存放内存地址的特殊數據類型,指針類型和普通的int、double類型不同,它不是一個基礎類型,而是與C語言提供的基礎類型而形成的複合類型比如基礎類型有int、double、char,它們所對應的指針類型分别為int型指針、double型指針和char型指針,這些指針都有一個通用的性質,都是指向基礎類型變量的地址,即int型指針執行int類型變量的地址,double型指針指向double類型變量的地址,char型指針指向char類型變量的地址對于基礎的變量,我們可以書寫如下代碼:,接下來我們就來聊聊關于c語言指針深度講解?以下内容大家不妨參考一二希望能幫到您!

c語言指針深度講解(C語言初級.初識指針)1

c語言指針深度講解

指針為C語言中一種數據類型,它是一種用以存放内存地址的特殊數據類型,指針類型和普通的int、double類型不同,它不是一個基礎類型,而是與C語言提供的基礎類型而形成的複合類型。比如基礎類型有int、double、char,它們所對應的指針類型分别為int型指針、double型指針和char型指針,這些指針都有一個通用的性質,都是指向基礎類型變量的地址,即int型指針執行int類型變量的地址,double型指針指向double類型變量的地址,char型指針指向char類型變量的地址。對于基礎的變量,我們可以書寫如下代碼:

圖1

相應地,可以定義這些類型的指針變量,如下:

圖2

這些指針類型變量在基礎類型之後使用了星号,這就表明所定義的類型為一指針類型。關于星号的位置問題,有人喜歡将星号靠近基礎類型書寫,比如上面的代碼中使用了這種寫法,也有人喜歡将星号靠近變量名稱書寫,下面代碼為對應的另一種書寫風格:

圖3

兩種類型的書寫方式沒有本質上的區别,代碼中保持書寫一緻即可。

指針類型與普通類型的變量一樣,也是支持進行初始化和賦值操作。以基礎類型int型為例,初始化一個變量為0的語句為:

圖4

但是,指針對應的“零值”是什麼?在C語言中,指針的“零值”使用特殊常量NULL表示,那麼其對應的初始化為“零值”的語句就可以這樣書寫:

圖5

對于變量的初始化,其值不一定都是“零值”,還有可能是普通的數值,比如,整型的100,浮點型的3.14等,一個整型指針也可以初始化為一個内存地址,這個内存地址準确地說應該是一個整型變量所在的内存地址。比如上述圖4代碼中a的地址,如何獲取變量所對應的内存地址呢?使用一個名稱為獲取地址的運算符&,它是一個一元操作符,其用法是将它放置在變量名稱之前,如&a,獲取變量a所對應的内存地址,使用下面的代碼,初始化pa指針為變量a的地址。

圖6

指針在初始化為合法的内存地址之前是非法的,其内容不可以直接訪問,隻有将指針的地址設置為一個合法的變量地址之後,便可以通過這個指針操作數據。根據指針的特殊性,它本身就是一個内存地址,我們可以通過printf函數并指定對應的轉換符%p來顯示這個内存地址,顯然,對于指針來說,隻顯示指針所指向的内存地址并不能顯示出指針的作用,與這個地址上所對應的數據相比,這個數據顯得比地址本身更為重要,因此,每一個基礎類型的指針都提供了通過反引用(dereference)訪問對應數值的功能,比如,上述pa指針若要訪問它指向的變量a中的數據,可以使用*pa的方式,如下圖代碼,分别顯示指針pa的值和指針pa指向的值。

圖7

指針類型的變量除了支持反引用操作符之外,還支持幾個常見的操作符:加号操作符( ),減号操作符(-),遞增操作符( ),遞減操作符(--),加賦值操作符( =),減賦值操作符(-=)和sizeof操作符。這些操作符對于普通的單個變量地址操作沒有實際意義(甚至使用反引用訪問非法地址會導緻程序異常),隻有在特定的環境下才可以使用,比如,訪問數組時,将指針指向第一個元素所對應的地址,之後就可以通過不同的偏移量實現訪問數組中不同位置的元素。

圖8

圖8中第21行代碼定義了一個4個元素的整型數組,第22行代碼将整型指針pAges指向了數組第一個元素的地址(這個元素的地址其實與數組ages的地址是同一個内存地址),第24行代碼通過反引用顯示了數組中的第一個元素(索引為0)的數值,之後第25行代碼對指針pAges執行了遞增操作,即pAges現在指向了數值中第2個元素,其數值為36;第27行代碼對指針pAges執行了加賦值操作,将指針向後移動了2個元素,指向了最後一個元素72。由于數組中的數據存放方式是連續的、線性的,當指針的類型确定之後,那麼對指針進行算術運算後,如果指針依舊在數組的合法範圍内,就可以得到一個新的指針及其對應的數值。

字符指針廣泛引用于字符串操作。通常在操作字符串時,首先會将指針指向這個字符串的首地址,之後依次通過移動指針,直至遇到字符串的終止操作符’\0’,這樣就訪問了字符串中的每一個字符,也稱為遍曆字符串。下面的例子使用這種方法實現将一個字符串的内容複制到另一個數組中,構成另一個字符串。

圖9

圖9中src字符串為源字符串,代碼第33-39行代碼将源字符串中的内容複制到數組dst中,并構成一個新的字符串。第33行代碼将字符指針指向源字符串首地址,第44行代碼将字符指針pDst指向數組dst首地址,之後使用一個while循環語句,在循環語句第35行代碼,判斷當前的pSrc指針所指向的字符是否為’\0’字符,如果結果為真的話,則終止整個循環語句,複制操作完成,否則一直執行代碼第36-38行,第36行代碼将pSrc指針指向的字符賦值給pDst指針所指向位置的字符,第37行代碼遞增pSrc字符指針,第38行代碼遞增pDst字符指針,即每執行一次賦值操作,源字符指針和目标字符指針都向後移動一個位置,直至源字符指針指向的字符值變為’\0’位置。

Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
三千青絲詩句唯美精選50條(浸潤在詩詞中的美妙年華)
三千青絲詩句唯美精選50條(浸潤在詩詞中的美妙年華)
  自古美人歎遲暮,不許英雄見白頭。遲暮真的是一件隻能悲傷無奈的事情嗎?   每個年齡都有每個年齡獨有的美,青絲有鮮活的朝氣美,華發有溫潤的歲月美,它們本就不分伯仲,一樣動人!      衰老是終究不可避免的事,然而現在我們在很多短視頻平台都能看到,一些妝容精緻、服飾考究的阿姨,展現出了這個年齡段獨有的氣質美。   那是閱盡千帆後,被生活打磨出的獨特韻味,雖...
2024-09-30
核苷酸填充面部的危害(人們說我像辛普森)
核苷酸填充面部的危害(人們說我像辛普森)
  據英國《太陽報》報道,一名英國女子在嘴唇填充物溶解後出現了嚴重過敏反應,被緊急送往醫院。      報道截圖   這名女性化名露比,她在短視頻平台TikTok上分享了這段痛苦的經曆,該視頻在一天内被觀看了近50萬次。   據露比說,過敏反應非常糟糕,導緻她上唇腫大,臉部腫脹。盡管在一些照片中露比面帶微笑,但她表示,她再也不想做嘴唇整形了。   報道稱,有...
2024-09-30
紐西之謎面膜真的好用嗎(紐西之謎紐西之謎面膜)
紐西之謎面膜真的好用嗎(紐西之謎紐西之謎面膜)
  中國質量新聞網訊 (楊振遠)砸廣告、刷直播、上綜藝,紐西之謎可謂是近兩年風頭正勁的美妝品牌。然而,中國質量新聞網接消費者投訴稱,使用該品牌“爆款”産品“紐西之謎溫泉水乍彈面膜”後,“感覺油油的,很奇怪”,她通過查詢相關資料,認為紐西之謎所宣傳的“礦物質”護膚理念并沒有權威的科學數據支持,因此對其功效和安全性提出了質疑。   接訴後,中國質量新聞網委托專業...
2024-09-30
弱者如何讓自己立于不敗之地(懂得弱者道之用)
弱者如何讓自己立于不敗之地(懂得弱者道之用)
  老子在《道德經》第40章中說:“弱者道之用。”是什麼意思呢?   “弱”,柔弱;“用”,作用。這句話的意思是,“道”的作用是柔弱的。   一說到柔軟,人們自然會想到軟弱無力,像林黛玉一樣,弱不禁風,弱風扶柳一般嬌弱,經不起風吹雨打。   老子所說的“道”,其中的一個内涵就是指規律,規律是客觀存在的,不以人的意志為轉移,這就決定了人隻能服從規律,按客觀規律...
2024-09-30
天津港現狀(天津港四變)
天津港現狀(天津港四變)
        在中國北方最大的綜合性港口天津港,來自美洲、歐洲、東南亞的貨物在此集結轉運,服務國内國際雙循環。夏德崧攝(中經視覺)   面朝渤海,心向遠洋。   2019年1月17日,在天津港考察時強調,“經濟要發展,國家要強大,交通特别是海運首先要強起來。要志在萬裡,努力打造世界一流的智慧港口、綠色港口,更好服務京津冀協同發展和共建‘一帶一路’”。   ...
2024-09-30
Copyright 2023-2024 - www.tftnews.com All Rights Reserved