このコードでの記号*
と記号の意味は次のとおりです。&
#include<stdio.h>
main()
{
char *p;
p="hello";
printf("%s\n",*&*&p);
}
printf
上記のプログラムでステートメントは何をしますか?具体的には*&*&p
どういう意味ですか?
これらは:
*&*&
冗長であり、実際のプロジェクトでそのようなばかげたコードに遭遇することは決してありません。アンパサンドはのアドレスを取り、p
アスタリスクは*
それを逆参照して元のを生成しchar*
ます。行ったり来たり...
それを次のように考えてください:
*(&(*(&p)))
余談ですが、の型なし署名はmain
、の戻り型がint
想定されなくなった最新のコンパイラではカットされません。
はprintf
文字列を出力します。"hello"
これ&
は、がポインタのアドレスとそれaddressOf
に続くアドレスを返す演算子であり、ポインタアドレスに格納されている値とそれに続く値を返す演算子であるためです*
。valueOf
したがって、本質的に、ステートメントは次の*&*&p
ようになります
valueOf(addressOf(valueOf(addressOf(p))))
"hello"
これは、実際の場所に格納されている文字列を返します。
これがお役に立てば幸いです。