Если вы похожи на меня и начали программировать на языке более высокого уровня, то при первом знакомстве с указателями в сфере ведения блогов у вас создается впечатление, что вы достигли ворот ада. На самом деле концепция не такая уж и сложная, и их использование дает определенные преимущества. Однако следует соблюдать осторожность.

Так что же такое указатели? грязная версия!

Указатели - это просто тип данных, содержащий адрес памяти. Вот и все. Легко и просто. Если вы напечатаете указатель, он распечатает адрес в шестнадцатеричном формате - 0x0bff03764.

Указатели предназначены для прямого доступа к блокам памяти. Они сокращают время выполнения, пространство для хранения и сложность, позволяя создавать сложные типы данных. Когда программе необходимо передать данные функции, она может сделать это либо путем копирования данных и предоставления функции копии этих данных, либо может передать ссылку на исходные данные, чтобы функция могла работать напрямую с этими данными. . Это, кстати, знаменитая передача по ссылке в сравнении с передачей по значению. При использовании указателей вы передаете данные по ссылке, поэтому программа не создает новые копии данных, которые, в свою очередь, требуют выделения большего объема памяти, а вместо этого передает адрес ссылки исходных данных.

Как объявить указатель в C:

int justANummber = 21;

int * myPointer;

myPointer =

Вот оно. У вас есть указатель на C. Итак, что создает указатель? Оператор-указатель «*» делает. Просто это тот же оператор, что и умножение. Однако размещение и контекст в вашей программе будут определять ее функцию. В этом случае при объявлении переменной это указатель. Еще одна важная концепция - все указатели должны указывать на указатель. Указатель - это переменная-указатель; указатель - это переменная, на которую указывает указатель, использующая адрес памяти указателя.

В этом посте я не буду вдаваться в подробности работы с памятью, однако это очень важная тема, которая идет рука об руку с указателями, и я остановлюсь на ней в одной из следующих статей. Единственная часть, о которой я расскажу, - это то, что при использовании указателя вы всегда должны освобождать используемую для него память. Если вы этого не сделаете, у вас будет утечка памяти.

Вы освобождаете указатель с помощью ключевого слова «Free ()». Вот как мы освободим ранее созданный указатель:

Бесплатно (myPointer);

Указатели в Swift

Мне как Swift-разработчику интересно, что он также позволяет объявлять указатели. Однако это называется небезопасным Swift. Обычно при разработке приложений Swift вам не нужно использовать указатели, и Swift работает «безопасно для памяти». Но когда вам нужно использовать библиотеки C или взаимодействовать с C API, помимо прочего, вам может потребоваться доступ к указателям в Swift. Хотя Swift имеет много типов указателей, мы просто рассмотрим 2: UnsafePointer ‹T› и UnsafeMutablePointer ‹T›.

UnsafePointer используется для доступа к данным определенного типа. Это только для чтения.

UnsafeMultablePointer используется для доступа к данным определенного типа и управления ими. Он позволяет читать и писать.

Как объявить указатель в Swift:

var toys = 100

var otherToys = 50

let myToysPointer = UnsafePointer (& игрушки)

let myOtherToysMutablePointer = UnsafeMutablePointer (& otherToys)

myOtherToysMutablePointer.pointee = 2000 // Просто изменил значение otherToys на 2000 с 50

Вот и все. Теперь у вас есть указатели в Swift, и вы можете с ними управлять данными. Имейте в виду, что это всего лишь базовый обзор и что это сложная тема. Я расскажу о типах указателей Swift более подробно в другом посте.

Если вы хотите узнать больше об указателях и информатике, воспользуйтесь этими ресурсами:

BootCamp по программированию на языке C от Gribble Lab: http://www.gribblelab.org/CBootCamp/index.html

Ресурсы CS (постоянно обновляемая коллекция качественных ресурсов CS): https://github.com/CodeNeophyte/CS_Resources

Взаимодействие с C API: https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html

Небезопасный Swift: https://www.raywenderlich.com/148569/unsafe-swift