型の後ではなく、変数名の前にアスタリスクがあるのはなぜですか?

それらはまったく同等です.ただし、

int *myVariable, myVariable2;

myVariable の型が int* であることは明らかです 、一方 myVariable2 は int 型です .In

int* myVariable, myVariable2;

どちらも int* 型であることは明白に思えるかもしれません 、しかしそれは 04 として正しくありません int 型を持っています .

したがって、最初のプログラミング スタイルはより直感的です。


別の見方をすれば、11 タイプは 21 です


これまで誰も言及していなかったのは、このアスタリスクが実際には「逆参照演算子」であるということです。 " C.

*a = 10;

上記の行は、 39 を割り当てたいという意味ではありません 46 へ 、これは 51 を割り当てたいという意味です 任意のメモリ位置 65 に に指差す。そして、私は誰も書いているのを見たことがありません

* a = 10;

ありますか?したがって、逆参照演算子 ほとんどの場合、スペースなしで書かれています。これはおそらく、複数の行にまたがる乗算と区別するためです:

x = a * b * c * d
  * e * f * g;

こちら 78 誤解を招くでしょうね。

さて、次の行は実際には何を意味するのでしょうか:

int *a;

ほとんどの人は次のように言うでしょう:

つまり、81 97 へのポインタです

これは技術的には正しく、ほとんどの人はそのように見たり読んだりするのが好きであり、それが現代の C 標準が定義する方法です (言語 C 自体はすべての ANSI および ISO 標準よりも古いことに注意してください)。しかし、それを見る唯一の方法ではありません。この行は次のように読むこともできます:

100 の逆参照値 タイプは 118 です .

したがって、実際には、この宣言のアスタリスクは逆参照演算子と見なすこともでき、その配置も説明します。そしてその 128 ポインターは実際にはまったく宣言されていません。実際に逆参照できるのはポインターだけであるという事実から、暗黙的です。

C 標準では、133 に対して 2 つの意味しか定義していません。 オペレーター:

  • 間接演算子
  • 乗算演算子

間接参照は単なる 1 つの意味にすぎません。ポインタを宣言することに特別な意味はありません。間接参照操作が行うのは間接参照だけです。これは間接アクセスを実行するため、141 これは間接的なアクセスです (151 間接アクセスを意味します)、したがって、上記の 2 番目のステートメントは、最初のステートメントよりもはるかに標準に近いものです。