Получите адрес Объективного-c свойства (который является структурой C),

Как люди упоминали ранее, когда Вы используете деревья выражений parens, не необходимы. Порядок операций становится тривиальным и очевидным при рассмотрении дерева выражений. parens являются подсказками к синтаксическому анализатору.

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

синтаксический анализатор также значительно тяжелее при разрешении чисел с плавающей точкой в строке. Я должен был создать DFA для принятия чисел с плавающей точкой в C - это была очень кропотливая и подробная задача. Помните, допустимые плавающие точки включают: 10, 10., 10.123, 9.876e-5, 1.0f.025, и т.д. Я предполагаю, что некоторое разрешение от этого (в пользу simplicty и краткости) было сделано в интервью.

6
задан jscs 6 February 2015 в 19:42
поделиться

3 ответа

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

- (void)getMyStructPointer:(MyStruct **)outStruct {
    *outstruct = &myStruct;
}

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

2
ответ дан 10 December 2019 в 02:52
поделиться

MyStruct mystruct является закрытым в MyClass , я предполагаю, что когда вы делаете myClass.myStruct , вы ссылаетесь только на сгенерированный метод доступа, а не на фактическая структура.

Я не думаю, что вы можете получить доступ к переменной экземпляра (в данном случае структуре) извне, потому что она является частной.

2
ответ дан 10 December 2019 в 02:52
поделиться

Сам вопрос демонстрирует непонимание, по крайней мере, терминологии.

Свойство - это интерфейс, состоящий из двух (или одного только для чтения) методов, опубликованных объектом, а именно: методы getter и setter, в данном случае:

- (MyStruct) myStruct;
- (void) setMyStruct: (MyStruct) newMyStruct;

Нет смысла говорить о «получении адреса свойства».

Вы можете взять адрес переменной экземпляра (ivar). В этом случае у вас есть ivar с именем mystruct, и вы можете взять его адрес с помощью & mystruct в методе MyClass. Поскольку он помечен @protected (по умолчанию), вы можете взять его адрес в подклассе, используя & self-> mystruct . Если вы отметите его @public , то вы можете взять его адрес, используя & myobj-> mystruct .

2
ответ дан 10 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: