Как люди упоминали ранее, когда Вы используете деревья выражений parens, не необходимы. Порядок операций становится тривиальным и очевидным при рассмотрении дерева выражений. parens являются подсказками к синтаксическому анализатору.
, В то время как принятый ответ является решением одной половины проблемы, другая половина - на самом деле парсинг выражения - является все еще нерешенной. Как правило, эти виды проблем могут быть решены с помощью синтаксический анализатор с рекурсивным спуском . Запись такого синтаксического анализатора часто является забавным осуществлением, но большинство современные инструменты для синтаксического анализа естественных языков абстрагирует это далеко для Вас.
синтаксический анализатор также значительно тяжелее при разрешении чисел с плавающей точкой в строке. Я должен был создать DFA для принятия чисел с плавающей точкой в C - это была очень кропотливая и подробная задача. Помните, допустимые плавающие точки включают: 10, 10., 10.123, 9.876e-5, 1.0f.025, и т.д. Я предполагаю, что некоторое разрешение от этого (в пользу simplicty и краткости) было сделано в интервью.
Чтобы получить указатель на переменную экземпляра myStruct, вам нужно написать метод, который возвращает указатель на эту переменную экземпляра.
- (void)getMyStructPointer:(MyStruct **)outStruct {
*outstruct = &myStruct;
}
Я действительно не думаю, что это хорошая идея, хотя. Другие объекты не должны изменять ivar этого объекта из-под себя, и это единственное, что вы можете сделать с указателем на структуру, чего нельзя сделать с копией структуры, возвращаемой значением.
MyStruct mystruct
является закрытым в MyClass
, я предполагаю, что когда вы делаете myClass.myStruct
, вы ссылаетесь только на сгенерированный метод доступа, а не на фактическая структура.
Я не думаю, что вы можете получить доступ к переменной экземпляра (в данном случае структуре) извне, потому что она является частной.
Сам вопрос демонстрирует непонимание, по крайней мере, терминологии.
Свойство - это интерфейс, состоящий из двух (или одного только для чтения) методов, опубликованных объектом, а именно: методы getter и setter, в данном случае:
- (MyStruct) myStruct;
- (void) setMyStruct: (MyStruct) newMyStruct;
Нет смысла говорить о «получении адреса свойства».
Вы можете взять адрес переменной экземпляра (ivar). В этом случае у вас есть ivar с именем mystruct, и вы можете взять его адрес с помощью & mystruct
в методе MyClass. Поскольку он помечен @protected
(по умолчанию), вы можете взять его адрес в подклассе, используя & self-> mystruct
. Если вы отметите его @public
, то вы можете взять его адрес, используя & myobj-> mystruct
.