1.指標
func main()
go語言雖然保留指標,但與其它程式語言不同的是
1)預設值是nil,沒有null常量
2)操作符"&「是取變數位址,」*「通過指標訪問目標物件
3)不支援指標運算,不支援 「->」 運算子,直接用」."訪問目標成員
go語言指標定義
func main()
指標交換a,b值
func swap(a, b *int)
func main()
一維陣列賦值
func main()
fmt.println("a =", a)
b := [5]int
fmt.println("b =", b)
//部分初始化,沒有初始化的元素自動賦值為0
c := [5]int
fmt.println("c =", c)
//指定某個元素初始化
d := [5]int
fmt.println("d =", d)
}
二維陣列賦值
func main() , , }
fmt.println(e)
//部分初始化,只對第二行元素賦值
f := [3][4]int}
fmt.println(f)
}
兩陣列間支援比較和賦值,只支援 == 或 !=,比較是不是每個元素都一樣,兩個陣列比較,陣列型別要一樣。
2.隨機數生成與氣泡排序
func main()
fmt.printf("\n")
//氣泡排序,挨著的2個元素比較,公升序(大於交換)
for i :=0; ia[j+1]}}
fmt.println("有序後:")
for i:=0; i < n; i++
}
陣列做函式引數,它是值傳遞。實參陣列的每個元素給行引數組拷貝乙份。如果需要用函式改變陣列的值,用指標。
//陣列做函式引數,它是值傳遞
//實參陣列的每個元素給行引數組拷貝乙份
func modify(p *[5]int)
func main()
modify(&a)
fmt.println(a)
}
2.切片
func main()
s := array[0:3:5]
//[low:high:max]
//low下標的起點
//high下標的終點(不包括此下標),左閉右開
//len=high-low
//cap = max - low 容量
fmt.println("s = ", s)
fmt.println("len(s) = ", len(s)) //長度=3-0
fmt.println("cap(s) = ", cap(s)) //容量=5-0
//切片與陣列的區別
//陣列裡面的長度是固定的乙個常量,陣列不能修改長度,len和cap永遠固定
a := [5]int{}
fmt.printf("len = %d, cap = %d\n", len(a), cap(a))
//切片,裡面為空,或者為...切片的長度或容量可以不固定
s := int{}
fmt.printf("len = %d, cap = %d\n", len(s), cap(s))
}
切片的建立
//自動推導型別,同時初始化
s1 := int
fmt.println("s1 =", s1)
//借助make函式,格式make(切片型別, 長度, 容量)
s2 := make(int, 5, 10)
fmt.printf("len = %d, cap = %d\n", len(s2), cap(s2))
//容量可預設,預設時容量等於長度
切片操作
array := int
s1 := array[:] //[0:len(array):len(array)],不指定時容量和長度一樣
fmt.println(s1)
fmt.printf("len = %d, cap = %d\n", len(s1), cap(s1))
//操作某個元素,和陣列操作方式一樣
data := array[0]
fmt.println(data)
s2 := array[3:6:7]
fmt.printf("len = %d, cap = %d\n", len(s2), cap(s2))
s3 := array[:6] //從0開始,取6個元素,容量為10
fmt.printf("len = %d, cap = %d\n", len(s3), cap(s3))
s4 := array[3:] //從下標為3開始到結尾
fmt.println(s4) //取7個元素,容量為7
fmt.printf("len = %d, cap = %d\n", len(s4), cap(s4))
切片與底層陣列的關係
array := int
//新切片修改後原陣列也發生改變
s1 := array[2:5]
s1[1] = 666
fmt.println(s1)
fmt.println(array)
fmt.printf("len = %d, cap = %d\n", len(s1), cap(s1))
//另外新切片,切片的切片
s2 := s1[2:7]
s2[2] = 777
fmt.println(s2)
fmt.println(array)
func test(m map[int]string)
func main()
fmt.println("m4 =", m4)
//遍歷
for key, value := range m4
//如何判斷乙個key是否存在
//第乙個返回值為key所對應的value,第二個返回值為key是否存在的條件,存在ok為true
value, ok := m4[1]
if ok == trueelse
//刪除某個值
delete(m4, 1) //刪除key為1的內容
fmt.println(m4)
//將刪除操作寫在函式內部
test(m4) //在函式內部刪除某個key
fmt.println("m4 = ", m4)
}
2.定義結構體
//結構體型別
//有時我們需要將不同資料型別的陣列合成乙個有機的整體
//定義乙個結構體型別
type student struct
func main()
fmt.println("s1 =", s1)
//指定成員初始化,沒有初始化
s2 := student
fmt.println("s2 =", s2)
//初始化指標變數
var s3 *student = &student
fmt.println("s3 =", *s3)
s4 := &student
fmt.println("s4 =", *s4)
}
結構體指標變數
//1.指標有合法指向後,才操作成員
//先定義乙個普通結構體變數
var s student
//再定義乙個指標變數,儲存s的位址
var p1 *student
p1 = &s
//通過指標操作成員,p1.id和(*p).id完全等價,只能用.運算子
p1.id = 1
p1.name = "mike"
p1.*** = 'm'
p1.age = 18
p1.addr = "bj"
fmt.println("p1 = ",p1)
//2.通過new申請乙個結構體
p2 :=new(student)
p2.id = 1
(*p2).name = "mike"
p2.*** = 'm'
p2.age = 18
p2.addr = "bj"
fmt.println("p2 = ",p2)
如果想使用別的包的函式,結構體型別,結構體成員
函式名,型別名,結構體成員變數名,首字母必須大寫,可見
如果首字母是小寫,只能在同乙個包裡使用
go語言學習 陣列 切片 map
go語言中陣列的特點 陣列的長度是固定的,並且長度也是陣列型別的一部分 是值型別,在賦值或者作為引數傳遞時,會複製整個陣列,而不是指標 定義陣列的語法 var arr1 5 int 5 int 未初始化的值,就預設初始化為該型別的預設值 var arr2 int 3 int 長度可由初始化的元素個數...
Go語言學習筆記九 指標
指標的概念是當時學c語言時了解的。go語言的指標感覺與c語言的沒啥不同。指標變數是儲存記憶體位址的變數。其他變數儲存的是數值,而指標變數儲存的是記憶體位址。這個記憶體位址可能儲存者乙個基本數值。指標變數也是有型別的。它需要知道自己儲存的記憶體位址指向數值的型別,因為不同的數值型別占用的空間大小是不同...
C語言學習(三) 指標
指標的定義int p char p float p指標變數所佔記憶體的大小 跟前面定義的型別無關 而跟系統有關 16bits作業系統 2b 32bits作業系統 4b 64bits作業系統 8b 指標指向乙個值所在的第乙個位元組 通常乙個位址存放乙個位元組 const修飾指標 指標指向乙個字串時 如...