error: lvalue требуется как унарный операнд «& amp;», я видел решения, но я не могу связать их с моим запросом

Фрагмент, объявленный в макете, по-разному обрабатывается Android. Замените

 <fragment
     android:id="@+id/fragment_place"
     android:name="packagename.FirstFragment"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_weight="0.87"/> 

на FrameLayout или подкласс ViewGroup по вашему выбору и программно обработайте все транзакции. Остальное выглядит хорошо для меня

0
задан tkausl 13 July 2018 в 20:00
поделиться

3 ответа

Использование

print(&(name+0)); //ERROR here

кажется результатом некоторого недоразумения.

Прежде всего, почему это синтаксическая ошибка?

(name + 0) не оценивает lvalue . Следовательно, вы не можете взять адрес значения этого выражения.

Простой способ решить, является ли что-то lvalue или нет, спросить себя: могу ли я использовать его на LHS оператора присваивания? В вашем случае вы должны спросить: могу ли я использовать

(name + 0) = <something>;

Ответ «нет».

Если вы хотите передать адрес первого элемента из name до print, вы можете использовать несколько методов.

print(&(name[0]));  // Explicitly get the first element's address.
print(name);        // The array decays to the address of the first element.
2
ответ дан R Sahu 17 August 2018 в 12:10
поделиться

Чтобы указать стандарт C11 в разделе 6.3.2.1, подраздел 1:

lvalue - это выражение (с типом объекта, отличным от void), который потенциально обозначает объект; если lvalue не назначает объект при его оценке, поведение не определено. Когда объект называется определенным типом, тип определяется значением l, используемым для обозначения объекта.

В этом случае у вас есть выражение (name + 0). В то время как name сам обозначает объект и поэтому является значением lvalue, результат добавления в этом выражении не обозначает объект, а скорее значение и не является lvalue и, следовательно, не подходит для унарного оператора &.

1
ответ дан Christian Gibbons 17 August 2018 в 12:10
поделиться

&(name+0) не эквивалентен &name[0]. &name[0] совпадает с &(*(name + 0)). Обратите внимание на косвенность, когда вы используете оператор индекса, это то же самое, что и смещение указателя и разыменование его.

0
ответ дан r3mus n0x 17 August 2018 в 12:10
поделиться
Другие вопросы по тегам:

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