日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言指针的心得体会~

發布時間:2024/1/1 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言指针的心得体会~ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C語言學了這么些天數,果然遇到的第一個難點就是指針~

指針學習就要結束了,先記錄并梳理一下來自己初步理解的內容:

在梳理指針之前;

首先要明白虛擬內存中,是存在連續的,線性排列的內存塊,每個內存地址代表一內存塊,每一內存塊占用一字節。每個內存塊都擁有自己的地址,都可以存儲一字節即八位的二進制數據。

然后是有關指針的內容:

1,指針一般在內存中定義為四個字節,和數據變量一樣,它也具有地址,和數據變量不同,他存放的只能為其他變量的地址。

2,指針是也是一種數據類型,它不是單獨存在的類型,它是由其他類型派生而來的。(例如類型可以是:指向int的指針類型)

3,一般我們稱為的指針具有的屬性為三,一為指針類型,二為指針類型的名稱即變量,三為指針的內容即指針地址。

舉例:int *p = #? 那么,int* 為指針類型,p為指針類型的變量,&num為指針類型的值即一個內存地址。

4,一般我們把指針類型的值即指針存儲了地址稱之為指向,譬如指針A指向變量a就是指針A存儲了變量a的地址。

5,指針類型的值僅僅是一段連續內存的首個地址,就是它只能存儲一個內存塊的地址。

6,數據一般由多個字節組成即占用多個內存塊,而指針只能存儲一個內存塊的的地址,這導致我們解引用時只能讀取到一塊內存的數據,讀取char類型數據還好,可一旦讀取長字節數據,就會出現問題。為了避免出現這種問題,就有了指針類型的出現,當我們定義指針類型為int型時,這就導致指針解引用時在對應的內存塊依次讀取(四個內存塊)四個字節的內容。

7,指針類型的定義一定要看指針所指變量的數據類型,指針的類型一定要和所指變量的數據類型一致,原理如上一條。

8,指針p指向存放數據的變量,那么p就是一級指針。若指針p指向另一指針變量,那么它就是二級指針,若p指向指向指針的指針,那么p就是三級指針,可以依次類推。

9,指針的賦值就是取得變量的地址,取址符&。指針可以直接取得數據變量的地址,那么此此指針就是一級指針。

10,指針的賦值非常講究,編譯器只可將兩邊等級相同的指針著完成賦值。倘若我希望定義指針p為三級指針來操控二級指針q所操控的數據,那么我需要取得二級指針q的地址來賦值給p。所以在很多地方,尤其是存放字符串的指針數組這里,想要輸出字符串一定要考量好了該定義幾級指針來存放指針數組的指針地址,因為字符串指針為一級,指針數組內的指針元素為二級,指針數組的指針為三級指針,你至少需要定義一個四級指針才能存放指針數組內嵌的指針的地址。

11,用指針輸出數據時,需要用到解引用,字符為*,它的功能就是按地址尋此地址對應的變量并獲取變量存儲的內容,可以獲取數據,也可以獲取地址,當獲取了地址時,倘若為print函數用f%d做輸出,是不能立即輸出的,需要再次解引用,知道拿到數據為止,倘若輸出為%s,是可以直接取出字符串地址給printf輸出的。

12,有一規律就是定義幾級指針,輸出時就解引用幾次。

13,數組具有內嵌的指針,可以用數組名來表示,這個內嵌指針的地址為數組首元素地址,這個指針存放的數據為數組首元素的地址。即對與這個內嵌指針來講,它的地址 = 它的數據 。

14,指針數組*p[5]為長度為5元素均為指針的數組,數組名為p,數組具有內嵌指針就是p,算上數組元素是指針,p為二級指針。數組名p就是數組的指針,進行指針運算時每對p進行+1,就得到了數組下個元素的地址,p的步長為1。

15,數組指針(*p)[5]為指向長度為5沒有名字的數組的指針,p是一個指針,是單獨的指針,它所指向的數組沒有名字,所以數組的內嵌指針不好表示,但是也是存在的,數組內嵌的指針就是一級指針。那么指向這個數組的指針p同樣也就是二級指針,但對p運算時p的步長為5,這是由于p為單獨的,指向整個數組的地址有關,p每加一跨度都是整個數組。

16,前面說過,數組的內嵌的指針本身的地址等于數組首元素的地址,所以,當數組指針解引用的時候,根據地址尋到的就是數組內嵌指針存儲的地址,也是數組首元素的地址,不過這次對地址進行運算,一級指針的運算,跨度就不是整個數組的跨度了,而是1。

17,***p與*(*p)[5]為同級指針(均為三級),只是進行指針運算時解引用之后的指針步長不同。

以后遇到有關指針新的心得體會,可以回來修正或者增添。

?

?

總結

以上是生活随笔為你收集整理的C语言指针的心得体会~的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。