Понимание сложных указателей и адресов операторов, используя * & amp; * & amp; p в C

Кто-нибудь может объяснить, как printf печатает привет в следующем?

#include<stdio.h>

void main()
{
char *p;
p="hello";
printf("%s",*&*&p);
}

Я знаю это *&p … означает значение в p, то есть адрес строки «hello». Что происходит в начальном *&

0

Решение

Как вы сказали, *&p средства p, это означает последовательный * а также & отменяет следовательно *&*&p становится p тоже.

И как @Kerrek сказал (в комментарии), что *&p выдает lvalue, поэтому вы берете его адрес снова.


Обратите внимание, что ваш код не соответствует стандарту. main() должен иметь int как тип возврата. И вы не можете назначить "hello" к неконстантная char*, Это должно быть const char*, Стандартный соответствующий код будет следующим:

#include<stdio.h>

int main()
{
const char *p = "hello";
printf("%s",*&*&p);
}
7

Другие решения

&p это адрес p,

*p на что указывает адрес? p,

*&p является *(&p) вещь, на которую указывает адрес &p — который p сама (то есть вещь, на которую указывает адрес «адрес р»).

Таким образом, получается, что *&p просто p*& уничтожить друг друга. Вы можете повторить это: *&*&p все еще будет p, Вы можете сделать это до бесконечности: *&*&*&*&*&*&*&*&*&p также будет p,

1

«*&отменяет друг друга. Вы получаете адрес p, а затем снова разыменовываете его. Таким образом, конечный результат будет просто р.

0
По вопросам рекламы [email protected]