golang中的数组与C中数组的区别

golang中的数组与C中数组的区别,第1张

概述golang中的数组是这样说的: Arrays are values, not implicit pointers as in C. 1、数组做参数时, 需要被检查长度. 2、变量名不等于数组开始指针! 3、不支持C中的*(ar + sizeof(int))方式的指针移动. 需要使用到unsafe包 4、如果p2array为指向数组的指针, *p2array不等于p2array[0] 例子1 :数 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("%x\n",*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("%v\n",unsafe.Pointer(args)) //获取数组地址方法1}func main() {	var args = [4]int{1,4}	use_array(&args)             // 数组名已经不是表示地址了,需要使用"&"得到地址	fmt.Printf("%v\n",&args[0]) //获取数组地址方法2	fmt.Println(args)}

输出结果:

0x116b2160

0x116b2160

[1 100 3 4]

总结

以上是内存溢出为你收集整理的golang中的数组与C中数组的区别全部内容,希望文章能够帮你解决golang中的数组与C中数组的区别所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1277953.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存