# UnsafePointer(Swift)

## 教學連結

* [**UnsafePointer**](http://swifter.tips/unsafe/)

## 範例

* 某個API在C和Swift的對應寫法是：

```c
//C
void method(const int *num) {
    printf("%d",*num);
}

//Swift
func method(num: UnsafePointer<CInt>) {
    print(num.memory)
}
```

* 這裡原來的C API中已經指明了輸入的num指針的不可變的(const)，因此在Swift中我們與之對應的是UnsafePointer這個不可變版本。如果只是一個普通的可變指針的話，我們可以使用UnsafeMutablePointer來對應：

| C API        | Swift API            |
| ------------ | -------------------- |
| const Type\* | UnsafePointer        |
| Type \*      | UnsafeMutablePointer |

* 在C中，對某個指針進行取值使用的是\*，而在Swift中我們可以使用memory屬性來讀取相應內存中存儲的內容。通過傳入指針地址進行方法調用的時候就都比較相似了，都是在前面加上&符號，C的版本和Swift的版本只在聲明變量的時候有所區別：

```c
// C
int a = 123;
method(&a);   // 输出 123

// Swift
var a: CInt = 123
method(&a)    // 输出 123
```
