5

このコードでの記号*と記号の意味は次のとおりです。&

#include<stdio.h>
main()
{
  char *p;
  p="hello";
  printf("%s\n",*&*&p);
}

printf上記のプログラムでステートメントは何をしますか?具体的には*&*&pどういう意味ですか?

4

2 に答える 2

9

これらは:

*&*&

冗長であり、実際のプロジェクトでそのようなばかげたコードに遭遇することは決してありません。アンパサンドはのアドレスを取り、pアスタリスクは*それを逆参照して元のを生成しchar*ます。行ったり来たり...

それを次のように考えてください:

*(&(*(&p)))

余談ですが、の型なし署名はmain、の戻り型がint想定されなくなった最新のコンパイラではカットされません。

于 2012-08-25T06:45:16.070 に答える
4

printf文字列を出力します。"hello"これ&は、がポインタのアドレスとそれaddressOfに続くアドレスを返す演算子であり、ポインタアドレスに格納されている値とそれに続く値を返す演算子であるためです*valueOf

したがって、本質的に、ステートメントは次の*&*&pようになります

valueOf(addressOf(valueOf(addressOf(p))))

"hello"これは、実際の場所に格納されている文字列を返します。

これがお役に立てば幸いです。

于 2012-08-25T06:51:38.857 に答える