それらはまったく同等です.ただし、
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 番目のステートメントは、最初のステートメントよりもはるかに標準に近いものです。