Фрагмент, объявленный в макете, по-разному обрабатывается 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
по вашему выбору и программно обработайте все транзакции. Остальное выглядит хорошо для меня
Использование
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.
Чтобы указать стандарт C11 в разделе 6.3.2.1, подраздел 1:
lvalue - это выражение (с типом объекта, отличным от void), который потенциально обозначает объект; если lvalue не назначает объект при его оценке, поведение не определено. Когда объект называется определенным типом, тип определяется значением l, используемым для обозначения объекта.
blockquote>В этом случае у вас есть выражение
(name + 0)
. В то время какname
сам обозначает объект и поэтому является значением lvalue, результат добавления в этом выражении не обозначает объект, а скорее значение и не является lvalue и, следовательно, не подходит для унарного оператора&
.
&(name+0)
не эквивалентен &name[0]
. &name[0]
совпадает с &(*(name + 0))
. Обратите внимание на косвенность, когда вы используете оператор индекса, это то же самое, что и смещение указателя и разыменование его.