指標學習筆記(一)Knight 45

2021-10-10 07:02:00 字數 1541 閱讀 2680

知識點1【資料型別】

資料型別的本質作用:合理地利用空間

資料的基本型別包括:char short int long float double。

知識點2【指標變數的定義】

記憶體的管理:將記憶體抽象成乙個很大的一堆字元陣列。對記憶體中的每乙個位元組分配乙個32位或64位的編號(與32位和64位處理器有關),這個編號被稱作記憶體位址。定義乙個變數來儲存上述編號,這樣的變數就被稱為指標變數

#include

intmain()

**中&用來取變數的位址,依據知識點1的內容,int型別的變數num在記憶體中占用四個位元組,而&num代表的是變數num的起始位址,也就是它占用的四個位元組中的第乙個。

我們在上面已經說過,定義指標變數的目的是儲存num的位址,在上圖第四行**,也就是定義指標變數時,【*】是表示p是指標變數,而不是普通變數。將「null」賦值給【*p】則是將指標變數初始值定義為空。第五行**,計算出了指標變數p在記憶體中占有8個位元組。指標「一般」佔4位元組,任何乙個資料型別的大小都是不固定的,要看機器和標準庫,64位8個位元組32位4個。在第六行**執行後,num的位址便與p建立了關係。如第八行**,在指標變數的使用中,*p表示取p儲存的位址對應空間的內容,即num的位址。

知識點3【指標變數的型別】

自身的型別:在指標變數定義的時候,定義語句除去變數名,剩下的便是指標變數自身的型別。

例如,p自身的型別便是int *

指向的型別:在指標變數定義的時候,定義語句除去變數名及離它最近的乙個*,剩下的便是指標變數指向的型別。

例如,p指向的型別便是int

指標變數指向的型別決定了指標變數所取空間的寬度,決定了指標變數+1跳過的單位跨度。

如上圖**及其執行結果,不難發現,指向的型別為int的變數p+1之後表示num位址的數值增加了4,而指向的型別為char的變數p1經過如此變化之後數值僅增加了1。這個跨度是由指標變數指向的型別決定的,根據知識點1,int變數佔4個位元組,char變數佔1個位元組,給指標變數加上乙個整數實際上加的數是這個整數和指標資料對應位元組數的乘積。

p只儲存了num的首位址,但能把空間裡面的東西取出來的原因就是指標變數指向的型別決定了指標變數取物空間的寬度。同樣根據知識點1,int變數佔4個位元組,char變數佔1個位元組,short變數佔2個位元組,而16進製制數每2位占用乙個位元組,由此便出現這種情況。

Leetcode學習筆記(一)可憐的小豬458

有 1000 只水桶,其中有且只有一桶裝的含有毒藥,其餘裝的都是水。它們從外 起來都一樣。如果小豬喝了毒藥,它會在 15 分鐘內死去。問題來了,如果需要你在一小時內,弄清楚哪只水桶含有毒藥,你最少需要多少只豬?回答這個問題,並為下列的高階問題編寫乙個通用演算法。假設有 n 只水桶,豬飲水中毒後會在 ...

Django學習筆記第4 5記

一 表單 1 request request包含一些屬性和方法 request.path,get host 等等 request.meta中包含了本次http請求的header資訊,常用的鍵值包括 http referer,http user agent,remote addr 使用如下例 2 表單...

2020 4 22學習筆記day45

wait notify notifyall方法都是object中的方法,任何物件都可以呼叫到這個方法。但是只能在加鎖的 塊中,使用 當做鎖的物件 來呼叫wait notify notifyall方法。其他情況,如果不是在加鎖的 塊中,或者不是使用 當做鎖的物件 來呼叫wait notify noti...