golang中的陣列與C中陣列的區別

2021-08-01 07:57:16 字數 1398 閱讀 8400

golang中的陣列是這樣說的: arrays are values, not implicit pointers as in c.

1、陣列做引數時, 需要被檢查長度.

2、變數名不等於陣列開始指標!

3、不支援c中的*(ar + sizeof(int))方式的指標移動. 需要使用到unsafe包

4、如果p2array為指向陣列的指標, *p2array不等於p2array[0]

例子1 :陣列做引數時, 需要被檢查長度

func use_array(args [4]int) 

func main()

use_array(args)

fmt.println(args)

}

編譯出錯:cannot use args (type [5]int) as type [4]int in argument to use_array

需要有長度上的檢查

例子2: 變數名不等於陣列開始指標

func use_array(args [5]int) 

func main()

use_array(args)

fmt.println(args)

}

輸出結果:[1 2 3 4 5]

沒有儲存結果, 陣列名的用法與c的不一樣. 在golang裡是這樣的:

// 有長度檢查, 也為位址傳參

func use_array(args *[4]int)

func main()

use_array(&args) // 陣列名已經不是表示位址了, 需要使用"&"得到位址

fmt.println(args)

}

輸出結果:[1 100 3 4]

例子3 :如果p2array為指向陣列的指標,*p2array不等於p2array[0]

import (

"fmt"

)func main()

編譯出錯:invalid operation: *p2array + 1 (mismatched types [3]int and int)

func use_array(args *[4]int) 

func main()

use_array(&args) // 陣列名已經不是表示位址了, 需要使用"&"得到位址

fmt.printf("%v\n", &args[0]) //獲取陣列位址方法2

fmt.println(args)

}

輸出結果:

0x116b2160

0x116b2160

[1 100 3 4]

golang中的陣列

陣列含義 同一種資料型別元素的集合,陣列的成員可以修改,但是不能追加跟刪除,大小不可以變化 陣列的定義 var 陣列名 元素數量 t陣列的訪問 通過下標進行訪問,下標從0開始,最後乙個元素是len 陣列名 1 注意 訪問不能越界,越界會panic 陣列的遍歷 package main import ...

golang中陣列與切片的應用

加注釋擼起來 package main description 陣列與切片 author guai date 2020 2 21 9 15 import fmt math rand time func main fmt.println 雞的總重 totalweight 陣列定義和記憶體布局 定義 v...

golang 包含 陣列 Golang 陣列與分片

與陣列的區別陣列是固定長度的,而分片確實可動態增長的,以定義為例 定義陣列,一定要指定長度var names 5 string 定義分片,不需要指定長度var names string在函式呼叫時,陣列是值傳遞,而分片是引用傳遞 其實對於 golang 來講,函式呼叫的時候都是值傳遞,拷貝乙個副本,...