指標與記憶體

2021-10-06 10:40:44 字數 1540 閱讀 7961

char 乙個位元組 double 8個位元組 int 4個位元組 short 2 個位元組 fioat 4個位元組

將記憶體條抽象成乙個很大的一維字元陣列,對記憶體條中的每乙個位元組分配乙個32位或64位的編號(與32位或64位處理器相關),這個編號我們稱之為記憶體位址。

定義乙個變數,用來儲存記憶體位址,這個變數就為指標變數。

取乙個變數的位址,預設取變數的起始位址。

int

*p //定義的時候*說明p是指標變數而不是普通變數

int num=

100;

p =#

printf

("*p=%d"

,*p); //使用時候*表示取p儲存的位址編號對應得內容

指標變數是乙個4位元組變數。

指標變數的兩種型別:自身的型別、指向的型別(暫且不是很清楚)

自身型別:在定義指標變數的時候,將變數名抹黑,剩下啥型別,指標變數就是什麼型別。

指標變數指向變數型別:在定義指標變數的時候,將變數名和離他最近的乙個*抹黑,剩下啥型別,指標變數指向變數就是什麼型別。

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

int num=

100;

p =#

printf

("p=%u"

,p);

printf

("p+1=%u"

,p+1

);

執行結果:

p=

16447448p+1

=16447452

//指標變數+1跳過了4個位元組,因為指標變數p指向型別為int

指標變數所取空間內容的寬度:

int num =

0x01020304

;//在win/linux系統倒著存(小端)

int *p;

char *p1;

short *p2;

*p=& num;

*p1 =

#//乙個位元組且倒著取。

*p2=

#printf

("*p=%#x,*p1=%#x,*p2=%#x"

,*p,

*p1,

*p2)

執行結果:

執行結果:

*p3=

0x0201

記憶體與指標 陣列與指標

陣列指標 行指標 型別識別符號 變數名 個數 陣列指標指向乙個提取的陣列,本質為指標 定義 int p n p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。陣列指標的步長必須和它指向的二維陣列的列長相同!p 2 相當...

golang 指標與記憶體

go指標 1.go指標提供了控制資料結構的指標的能力,但不能進行指標運算,go語言允許控制特定集合的資料結構,分配的數量以及記憶體訪問模式。2.預設值 nil,沒有 null 常量 3.不支援指標運算,不 支援 運算子,直接 用 訪問目標成員 4.go語言的取位址符是 放入乙個變數前使用就會返回相應...

C指標與記憶體

指標是c c 中重要的構造型別,指標賦予了 c c 程式直接訪問和修改記憶體的能力。c c 的許多重要應用,如編譯 os 嵌入式開發都依賴於這種能力。馮諾依曼體系的計算機記憶體儲存指令和資料,我們可以將其抽象為指令區和資料區 當然實際情況要複雜得多 資料區中包含棧 stack 和堆 heap 區,棧...