var a = [1,2,3]
let ptr1 = UnsafeMutablePointer<Int>(&a[0]) //works fine
let index = 0
let ptr2 = UnsafeMutablePointer<Int>(&a[index]) //compiler throws error
error: cannot invoke initializer for type
UnsafeMutablePointer<Int>with an argument list of type(inout Int)
Why the latter one doesn't compile? Is there anything I am missing here?
I wanted to do like a below snippet.
class Holder {
    var numbers: [Int] = [1,2,3,4]
    var modifier: Modifier
    init(index: Int) {
       self.modifier = Modifier(UnsafeMutablePointer(&self.numbers) + index)
    }
}
class Modifer {
  var ptr: UnsafeMutablePointer<Int>
  init(_ ptr: UnsafeMutablePointer<Int>) {
     self.ptr = ptr
  }
  func change(to: Int) {
     self.ptr.pointee = to
    // expected the change to be reflected in numbers array
    // but as Rob Napier said it became invalid and throws EXC_BAD_ACCESS
  }
}
How can I achieve the above expected result?
 
    