Указатель и адрес в С
У моего учителя есть эти вопросы на лекции в 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 токенизирует выражения.