golang中的数组与C中数组的区别
发布时间:2020-12-16 18:14:12 所属栏目:大数据 来源:网络整理
导读:golang中的数组是这样说的: Arrays are values,not implicit pointers as in C. 1、数组做参数时,需要被检查长度. 2、变量名不等于数组开始指针! 3、不支持C中的*(ar + sizeof(int))方式的指针移动. 需要使用到unsafe包 4、如果p2array为指向数组的指针, *p
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) { args[1] = 100 } func main() { var args = [5]int{1,2,3,4,5} 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) { args[1] = 100 } func main() { var args = [5]int{1,5} use_array(args) fmt.Println(args) }输出结果:[1 2 3 4 5] 没有保存結果,数组名的用法与C的不一样. 在golang里是这样的:
// 有长度检查,也为地址传参 func use_array(args *[4]int) { args[1] = 100 //但是使用还是和C一致,不需要别加"*"操作符 } func main() { var args = [4]int{1,4} use_array(&args) // 数组名已经不是表示地址了,需要使用"&"得到地址 fmt.Println(args) }输出结果:[1 100 3 4] 例子3 :如果p2array为指向数组的指针,*p2array不等于p2array[0]
import ( "fmt" ) func main() { var p2array *[3]int p2array = new([3]int) fmt.Printf("%xn",*p2array+1) // 不管p2array是指针变量还是数组变量,都只能使用"[]"方式使用 }编译出错:invalid operation: *p2array + 1 (mismatched types [3]int and int) golang中获取数组地址的2中方法:
func use_array(args *[4]int) { args[1] = 100 //但是使用还是和C一致,不需要别加"*"操作符 fmt.Printf("%vn",unsafe.Pointer(args)) //获取数组地址方法1 } func main() { var args = [4]int{1,4} use_array(&args) // 数组名已经不是表示地址了,需要使用"&"得到地址 fmt.Printf("%vn",&args[0]) //获取数组地址方法2 fmt.Println(args) } 输出结果: 0x116b2160 0x116b2160 [1 100 3 4] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |