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 區,棧...