定義一些變數,並輸出其位址
一、一般變數
var a, b int32var c, d int64
輸出其位址
結果:a 0xc082006310
b 0xc082006320
c 0xc082006330
d 0xc082006340
結論:它們的位址間隔均為16位元組,其它空餘的位址浪費了?
二、陣列切片
e := make(byte, 40)f := make(byte, 40)
g := make(byte, 40)
f = byte("12345678901234567890") //字串長度為20位元組
g = byte("1234567890123456789012345678901234567890") //字串長度為40位元組
1.輸出各自len()與cap()
結果:e: 40 40
f: 20 40
g: 40 40
結論:
a.切片的實際長度len()與其資料的長度相關,f[30]是不可訪問的;
b.make(byte,40)只保證其最大容量為40,即cap()=40。
2.輸出首位址及其首個
fmt.printf("&e:%p &e[0]:%p ", &e, &e[0])fmt.printf("&f:%p &f[0]:%p ", &f, &f[0])
fmt.printf("&g:%p &g[0]:%p ", &g, &g[0])
結果:&e:0xc082008660 &e[0]:0xc08204c060
&f:0xc082008680 &f[0]:0xc0820086c0
&g:0xc0820086a0 &g[0]:0xc08204c0f0
結論:a.順序宣告切片變數時,它們的位址是"連續"的,分別間隔32位元組;
b.切片的資料位址與切片本身的位址無關
3.對於以下**:
type test structfunc (t *test) set(buf byte)
t.data=buf 意味著什麼?
a := byte("1234567890")b := new(test)
b.set(a)
結果:&a: 0xc082002660
&a[0]: 0xc082004310
&b: 0xc082028020
&b.data: 0xc082002680
&b.data[0]: 0xc082004310
2)輸出a和b.data的len()和cap()
結果:a: 10 16
b.data: 10 16
結論:&a[0]==&b.data[0],且兩者的資料和容量均相同,所以推測t.data=buf 意味著t.data和buf指向同一段資料
檢視變數位址
在linux中寫乙個程式,裡面全域性變數,區域性變數,static,const,常數,陣列,輸出這些變數的位址 包括賦值的和沒有賦值的,各類資料型別 如下 include int a int b 1 int const c 1 int const x static int d static int ...
指標變數與變數位址
一 基本概念 儲存單元一般應具有儲存 資料和讀寫資料的功能,以8位二進位製作為乙個儲存單元,也就是乙個位元組。每個單元有乙個位址,是乙個整數 編碼,可以表示為 二進位制整數。程式中的變數和主儲存器的儲存單元相對應。變數的名字對應著儲存單元的位址,變數內容對應著 單元所儲存的資料。儲存位址一般用十六進...
區域性變數位址的返回
char fun 這個函式的返回值?以及這個函式在棧上的儲存布局 include include include char fun int main int argc,const char argv 就函式而言,返回區域性變數的位址這種做法是錯誤的,但是這個函式不管是在vs還是在gcc上編譯時都只會...