Указатель и адрес в С

У моего учителя есть эти вопросы на лекции в PowerPoint, но нет ответа. Может кто-нибудь помочь. новичок в с.

If a is an int variable, is it always true that *&a == a ?
If p is an int* variable, is it always true that p == &*p ?
Is it ever meaningful to say **p ?
Is it ever meaningful to say &&a ?
After assigning a = 2 and p = &a, how much is *p**p ?
If furthermore q = &p, how much is **q**p***q ?

Наконец, сколько стоит /*p?

1 ответ

Решение

Если a является переменной типа int, всегда ли верно, что *&a == a?

Так и должно быть, но я не могу найти однозначного утверждения на этот счет.

Если p - переменная типа int *, всегда ли верно, что p == &*p?

Да, в этом случае ни & ни * операторы на самом деле оцениваются. См. Онлайн- версию стандарта C 2011, § 6.5.3.2 ¶ 3.

Имеет ли смысл говорить ** р?

Да. Множественная косвенность проявляется повсюду. У вас могут быть указатели на указатели, указатели на указатели на указатели, указатели на массивы указателей, указатели на функции, возвращающие указатели на массивы указателей на указатели на указатели и т. Д.

Имеет ли смысл говорить &&a?

№ результата &a не является lvalue, поэтому вы не можете применить & оператор к нему. Другими словами, каков адрес адреса?

После присвоения a = 2 и p = &a, сколько будет *p**p?

Должен быть таким же, как a * a, хотя имейте в виду, что алгоритм токенизации C является "жадным", поэтому вы действительно хотите разделить термины и операторы пробелами.

Если, кроме того, q = &p, сколько будет **q**p***q?

Опять же, это должно быть так же, как a * a * aи, опять же, знайте, как C токенизирует выражения.

Другие вопросы по тегам