The Capacity field is equal to the length of the underlying array, minus (the index in the array) of (the first element of the slice) (zero in this case)

```
type sliceHeader struct {
ZerothElement *byte
Length int
Capacity int
}
var iBuffer [10]int
slice := iBuffer[0:0]
// Case 1: Underlying array has capacity of 10 byte
slice := sliceHeader{
ZerothElement: &iBuffer[0],
Length: 0,
Capacity: 10,
}
// Case 2: if we slice from slice[4:], it becomes
slice := sliceHeader{
ZerothElement: &iBuffer[4],
Length: 0,
Capacity: 6,
}
```

Since they share the same underlying array, but first element of the slice (pointing the index of underlying array) keep increasing.

Thanks @Steven Yeung's explanation

## Add new comment