Ne connaissez-vous même pas la différence entre les tranches nulles et les tranches vides ? Ensuite, l'intervieweur BAT devra vous demander de revenir en arrière et d'attendre la notification.

Insérer la description de l'image ici
Ne connaissez-vous même pas la différence entre les tranches nulles et les tranches vides ? Ensuite, l'intervieweur BAT devra vous demander de revenir en arrière et d'attendre la notification.
question

package main

import (
 "fmt"
 "reflect"
 "unsafe"
)

func main() {
    
    

 var s1 []int
 s2 := make([]int,0)
 s4 := make([]int,0)
 
 fmt.Printf("s1 pointer:%+v, s2 pointer:%+v, s4 pointer:%+v, \n", *(*reflect.SliceHeader)(unsafe.Pointer(&s1)),*(*reflect.SliceHeader)(unsafe.Pointer(&s2)),*(*reflect.SliceHeader)(unsafe.Pointer(&s4)))
 fmt.Printf("%v\n", (*(*reflect.SliceHeader)(unsafe.Pointer(&s1))).Data==(*(*reflect.SliceHeader)(unsafe.Pointer(&s2))).Data)
 fmt.Printf("%v\n", (*(*reflect.SliceHeader)(unsafe.Pointer(&s2))).Data==(*(*reflect.SliceHeader)(unsafe.Pointer(&s4))).Data)
}

Les tranches nulles et les tranches vides pointent-elles vers la même adresse ? Que va produire ce code ?

Comment répondre

les tranches nulles et les tranches vides pointent vers des adresses différentes. L'adresse du pointeur du tableau de référence de tranche vide nulle est 0 (elle ne pointe vers aucune adresse réelle). L'
adresse du pointeur de tableau de référence de la tranche vide existe et est fixée à une valeur.

s1 pointer:{
    
    Data:0 Len:0 Cap:0}, s2 pointer:{
    
    Data:824634207952 Len:0 Cap:0}, s4 pointer:{
    
    Data:824634207952 Len:0 Cap:0}, 
false //nil切片和空切片指向的数组地址不一样
true  //两个空切片指向的数组地址是一样的,都是824634207952

expliquer

  • J'ai mentionné dans l'article précédent que la structure de données des tranches est
type SliceHeader struct {
    
    
 Data uintptr  //引用数组指针地址
 Len  int     // 切片的目前使用长度
 Cap  int     // 切片的容量
}
  • La plus grande différence entre les tranches nulles et les tranches vides est que les adresses de référence de tableau vers lesquelles elles pointent sont différentes.
    Insérer la description de l'image ici
  • Toutes les tranches vides pointent vers la même adresse de référence de tableau.
    Insérer la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/m0_73728511/article/details/132866300
conseillé
Classement