0

次の中で、printfがhelloを出力する方法を説明できる人はいますか?

#include<stdio.h>

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

*&p... は p の値、つまり文字列 "hello" のアドレスを意味することを知っています。最初の *& で何が起こっているか

4

3 に答える 3

7

あなたが言ったように、はを意味*&pします。したがって、あまりにもなります。p*&*&*&pp

@Kerrek が (コメントで) 言った*&pように、左辺値を生成するので、そのアドレスをもう一度取得します。


あなたのコードは標準に準拠していないことに注意してください。戻り型としてmain()持つ必要があります。また、非 constintに割り当てることはできません。である必要があります。標準適合コードは次のようになります。"hello" char*const char*

#include<stdio.h>

int main()
{
   const char *p = "hello"; 
   printf("%s",*&*&p);
}
于 2012-09-06T15:24:02.677 に答える
1

&pのアドレスですp

*pはアドレスが指し示すものですp

*&p*(&p)、アドレスによって指されるもので&pありp、それ自体です (つまり、アドレス「p のアドレス」によって指されるもの)。

したがって、それ*&pはちょうどp-*&互いに打ち消し合うことがわかります。これを繰り返すことができます: *&*&pwill still be p. あなたはこれを無限に行うことができ*&*&*&*&*&*&*&*&*&pますp

于 2012-09-06T15:24:56.360 に答える
0

'*&' は互いにキャンセルします。p のアドレスを取得してから、再度逆参照しています。したがって、最終結果は p になります。

于 2012-09-06T15:25:26.817 に答える