slicelencapappendslice
题目:下面这段代码的输出结果是什么?
package main
import "fmt"
func sliceAppend(slice []int,v int) []int {
return append(slice, v)
}
func main() {
arr := make([]int,5, 10)
for i := 0;i < 5;i++ {
arr=append(arr,i)
}
slice := arr[:]
slice2 := sliceAppend(slice,1000)
slice3 := arr[:2]
slice3 = append(slice3, 10)
slice4 := arr[:8]
sliceAppend(slice4,100)
fmt.Println(arr,len(arr), cap(arr))
fmt.Println(slice,len(slice), cap(slice))
fmt.Println(slice2,len(slice2), cap(slice2))
fmt.Println(slice3,len(slice3), cap(slice3))
fmt.Println(slice4,len(slice4), cap(slice4))
}
这一题的考点比较多,我们这里总结一下相关的知识,理解了这些知识就能正确解答这道面试题。
slicelencaplencapslicesliceappendcapslicelencapsliceslicesliceslicesliceslicecap20482048512
正确答案:
[0 0 10 0 100 0 1 2 3 4] 10 10
[0 0 10 0 100 0 1 2 3 4] 10 10
[0 0 0 0 0 0 1 2 3 4 1000] 11 20
[0 0 10] 3 10
[0 0 10 0] 4 10
Map 字典
maprangemap
题目1:下面这段代码的输出结果是什么?
package main
import "fmt"
import "strconv"
type Value int
func main() {
outMap := make(map[string]Value,10)
for i := 0;i < 10;i++ {
outMap1[strconv.Itoa(i)] = Value(i)
}
for k,v range outMap {
fmt.Printf("%v: %v ", k,v)
}
fmt.Println()
}
maprangemaprange
正确答案:
输出结果不能确定
题目2:下面这段代码的输出结果是什么?
package main
import "fmt"
import "strconv"
func changeMap1(map1 map[string]Value,k string,v Value) {
map1[k] = v
}
func changeMap2(map2 map[string]*Value,k string,v Value) {
*map2[k] = v
}
type Value int
func main() {
outMap1 := make(map[string]Value,10)
for i := 0;i < 10;i++ {
outMap1[strconv.Itoa(i)] = Value(i)
}
outMap2 := make(map[string]*Value,5)
for k,v := range outMap1 {
outMap2[k] = &v
}
outMap1["5"] = 10
changeMap1(outMap1, "8",100)
*outMap2["2"] = 100
changeMap2(outMap2, "4",1000)
for i := 0;i < 10;i++ {
fmt.Printf("%v ", outMap1[strconv.Itoa(i)])
}
fmt.Println()
for i := 0;i < 10;i++ {
fmt.Printf("%v ", *outMap2[strconv.Itoa(i)])
}
fmt.Println()
}
mapmap
知识点:
mapmaprangemaprangerangemaprange
正确答案:
0 1 2 3 4 10 6 7 100 9
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000