根據這段時間的學習深深感覺到應該要深入理解記憶體機制和指標的用法真的很重要,這是第一篇,也是目前對記憶體和指標的認識的總結。
記憶體:就好像乙個容器,可以裝納資料在裡面,這個容器不是一整塊的,它是分了很多很多的小格仔,即記憶體中的位,每個格仔裝乙個0或者1,而我們要放到容器中的資料實際上也是要將他分解成很多段再放進去的,就是將資料轉換成二進位制0和1再放進記憶體中。
變數:在程式中宣告乙個變數後,則會根據所宣告變數的型別在記憶體中開闢乙個空間給這個變數使用,
各類資料型別的記憶體使用及取值範圍:
bool型為int型,一般認為佔4個位元組,取值true/false/error。
sbyte型為有符號8位整數,佔1個位元組,取值範圍在128~127之間。
bytet型為無符號16位整數,佔2個位元組,取值範圍在0~255之間。
short型為有符號16位整數,佔2個位元組,取值範圍在-32,768~32,767之間。
ushort型為無符號16位整數,佔2個位元組,取值範圍在0~65,535之間。
int型為有符號32位整數,佔4個位元組,取值範圍在-2,147,483,648~2,147,483,647之間。
uint型為無符號32位整數,佔4個位元組,取值範圍在0~4,294,967,295之間。
long型為64位有符號整數,佔8個位元組,取值範圍-9,223,372,036,854,775,808~9,223,372,036,854,775,807之間。
ulong型為64位無符號整數,佔8個位元組,取值範圍在0~18,446,744,073,709,551,615之間。
float型為32位單精度實數,佔4個位元組,取值範圍3.4e+10的負38次方~3.4e+10的38次方之間。
double型為64位實數,佔8個位元組,取值範圍1.7e+10的負308次方~1.7e+10的正308次方。
需要注意的是每個位元組佔8位。
變數在記憶體中是無意義的,它只是代表了一些需要隨時變化的在記憶體中的資料,為了方便編寫**,在程式編譯前使用變數來代表這些記憶體空間。
指標:指標也是乙個變數,不過這個變數不是用來裝資料的,它只是用來儲存記憶體位址,並可以直接訪問記憶體位址修改對應的資料。我們知道每個資料都需要宣告乙個變數來為它開闢記憶體空間儲存起來,而變數即使那塊空間的記憶體位址,比如宣告乙個變數a,int a=100;那麼我們就可以使用int* p=&a將變數a的記憶體位址提取出來並把這個位址儲存到指標變數p中去。指標變數也是乙個變數,它也在記憶體中開闢一定的空間以供儲存記憶體位址。這個空間很小,因為記憶體位址就是整數,如0x7fff9575c05f(
以0x開頭的表示後面的數字以16進製表示),就是一段16進製制的數字表示。
記憶體位址用處很多,比如可以在函式呼叫中將乙個記憶體位址作為實參傳遞給形參的指標,在被呼叫函式中就可以
利用這個指標直接對那一塊記憶體進行呼叫。
指標的宣告:資料型別* 指標變數名;如int* p;
指標的賦值: 左值(寫操作):int* p=100;即將100傳遞到指標p指向的記憶體空間中去。
右值(讀操作):int a; a=*p;即將指標p指向的記憶體空間中的資料傳遞給變數a。
go語言記憶體,位址,指標
指標就是位址 列印出變數的記憶體和位址 a可以取到a的位址 簡單說可以說位址就是索引,就是門牌號,記憶體就是倉庫,裡面存了東西,存了值 package main import fmt func main int儲存int的位址,int儲存int的位址 定義乙個變數p,型別為 int var p in...
記憶體位址和記憶體空間
在操作暫存器時,遇到概念上的理解問題。混淆了記憶體位址與記憶體空間 首先,讀懂指令 ldr r0,0x11000c40 0x11000c40是暫存器gpx2con的位址,將這個位址寫入r0暫存器的空間 ldr r1,r0 將r0空間的位址所指向的4位元組資料,讀入r1的記憶體空間,即r1儲存了0x1...
記憶體位址分配
inti 1 intj 1 cout i endl j endl 2 函式引數列表的存放方式是,先對最右邊的形參分配位址,後對最左邊的形參分配位址。3 little endian模式的cpu對運算元的存放方式是從低位元組到高位元組的 0x1234的存放方式入下 0x4000 0x34 0x4001 ...