Arrays 了解阵列和片的内存布局
在64位操作系统机器上 有关以下代码:Arrays 了解阵列和片的内存布局,arrays,go,slice,Arrays,Go,Slice,在64位操作系统机器上 有关以下代码: println("Simple Array:") var arrayint = [...]int{1, 2, 3, 4} //assign fmt.Println(arrayint) println("Simple Slice:") var sliceint []int sliceint = arrayint[:] //assign fmt.Println(sliceint) println("Array of arrays:") var arrayo
println("Simple Array:")
var arrayint = [...]int{1, 2, 3, 4} //assign
fmt.Println(arrayint)
println("Simple Slice:")
var sliceint []int
sliceint = arrayint[:] //assign
fmt.Println(sliceint)
println("Array of arrays:")
var arrayofarrays [3][len(arrayint)]int
for i := range arrayofarrays { //assign
arrayofarrays[i] = arrayint
}
fmt.Println(arrayofarrays)
println("Array of slices:")
var arrayofslice [len(arrayofarrays)][]int
for i := range arrayofarrays { // assign
arrayofslice[i] = arrayofarrays[i][:]
}
fmt.Println(arrayofslice)
println("Slice of arrays:")
var sliceofarray [][len(arrayint)]int
sliceofarray = arrayofarrays[:]
fmt.Println(sliceofarray)
var sliceofslices [][]int
以下是内存表示:
有关以下代码:
println("Simple Array:")
var arrayint = [...]int{1, 2, 3, 4} //assign
fmt.Println(arrayint)
println("Simple Slice:")
var sliceint []int
sliceint = arrayint[:] //assign
fmt.Println(sliceint)
println("Array of arrays:")
var arrayofarrays [3][len(arrayint)]int
for i := range arrayofarrays { //assign
arrayofarrays[i] = arrayint
}
fmt.Println(arrayofarrays)
println("Array of slices:")
var arrayofslice [len(arrayofarrays)][]int
for i := range arrayofarrays { // assign
arrayofslice[i] = arrayofarrays[i][:]
}
fmt.Println(arrayofslice)
println("Slice of arrays:")
var sliceofarray [][len(arrayint)]int
sliceofarray = arrayofarrays[:]
fmt.Println(sliceofarray)
var sliceofslices [][]int
编辑:下面是内存表示:
有关以下代码:
println("Simple Array:")
var arrayint = [...]int{1, 2, 3, 4} //assign
fmt.Println(arrayint)
println("Simple Slice:")
var sliceint []int
sliceint = arrayint[:] //assign
fmt.Println(sliceint)
println("Array of arrays:")
var arrayofarrays [3][len(arrayint)]int
for i := range arrayofarrays { //assign
arrayofarrays[i] = arrayint
}
fmt.Println(arrayofarrays)
println("Array of slices:")
var arrayofslice [len(arrayofarrays)][]int
for i := range arrayofarrays { // assign
arrayofslice[i] = arrayofarrays[i][:]
}
fmt.Println(arrayofslice)
println("Slice of arrays:")
var sliceofarray [][len(arrayint)]int
sliceofarray = arrayofarrays[:]
fmt.Println(sliceofarray)
var sliceofslices [][]int
以下是内存表示:
对于以下行:
sliceofslices = arrayofslice[:]
切片的内存表示形式是什么?使用前需要了解…arrayofslice
是一个片数组,由于片的大小是24字节,arrayofslice
的大小是n*24,其中n
是元素计数SliceOfSlice
是一个带支持数组的切片arrayofslicearrayofslice
是一个切片数组,由于切片的大小是24字节,arrayofslice
的大小是n*24,其中n
是元素计数SliceOfSlice
是一个带有支持数组的切片arrayofslice
你从哪里知道数组是指针?我认为这里的混淆是因为数组实际上是值。你从哪里知道数组是指针?我认为这里的混淆是因为数组实际上是值。1) 刚刚编辑了我的查询。。根据你的回答。。。请确认我对arrayofslice
2)我能说sliceofslice
is(指针,3,3)吗?1)您的理解似乎是正确的,只是arrayofslice不是指向数组的指针,而是数组。2) 正确。您的意思是,没有为arrayint
、arrayofarrays
和arrayofslice
分配单独的8字节来存储地址,如查询中所示。是这样吗?不是。数组是一种值类型&arrayofarrays与&arrayofarrays[0]相同链接中的图像是正确的。问题中的图像将arrayofslices显示为指向数组的指针,这是不正确的。1)刚刚编辑了我的查询。。根据你的回答。。。请确认我对arrayofslice
2)我能说sliceofslice
is(指针,3,3)吗?1)您的理解似乎是正确的,只是arrayofslice不是指向数组的指针,而是数组。2) 正确。您的意思是,没有为arrayint
、arrayofarrays
和arrayofslice
分配单独的8字节来存储地址,如查询中所示。是这样吗?不是。数组是一种值类型&arrayofarrays与&arrayofarrays[0]相同链接中的图像是正确的。问题中的图像将arrayofslices显示为指向数组的指针,这是不正确的。