C/C++ポインタ記号「*」の書式について


ポインタはC/C++言語の真髄の一つで、機能は強いが、様々な原因で、人によってポインタの理解が異なるため、書式も様々で、強迫症は我慢できないことを示している.
ここでいう「書式」とは、ポインタを定義したり宣言したりするときに慣れた書き方のことで、一般的に見られるのは以下のようなものです.
int num = 1;
int *a = #	//   
int * b = #	//   
int* c = #	//   

結果的には、もちろん以上の3つの表現は問題なく、コンパイラも間違っていません.しかし、プログラムの読者にとっては、不要な障害をもたらす可能性があります.
フォーマットは記号*と変数aを一緒に置くと、このような定義時に初期化された動作を賦値と誤認しやすく、以下の誤った連想をもたらす.
*a = # <====>a = &#
これは間違いであることは明らかです.int*a=#本来の意味は
int * a;
a = #
フォーマット1の書き方があるのは、プログラマーが*を演算子としているからかもしれません.
フォーマット2は、ポインタ記号*とデータ型と変数とを距離に保つという理解は、*記号がポインタを表すときに二重の意味を持つことを示唆することができる.同時に、以下の書き方をより美しく対称にします.
char * a, * b, * c;
フォーマット3は記号*とデータ型intを一緒に置くことで、int*を全体と見なすことを意味し、これは実際にコンパイラが実際に動作する方法でもあり、int*を独立したデータ型として見ることができ、「整数ポインタ」タイプと呼ぶことができます.このデータ型は「ポインタ自体」のデータ型を表すことに注意してください.「ポインタが指すデータ」のデータ型ではなく、両者はまったく異なります.同じ理屈で、char*、float*も同じです.個人的には、この表現方法はC/C++のプログラミング思想に合致し、理解しやすいと考えています.ただし、同じ行に対して複数の変数を定義すると、次のような誤解を招きます.
char* a, b, c;
上記の書き方は私たちの本意ではない可能性があります.コンパイラはaをchar*タイプの変数として定義するだけで、bとcはcharタイプですが、私たちはもともと次のように表現したいと思っていました.
char* a, *b, *c;
しかし、このように書くと対称美を失った.個人的には複数行定義に分割するか、
char* a;
char* b;
char* c;
これは美しいだけでなく、読みやすく理解しやすい.
まとめ:
C/C++言語では、記号「*」には3つの意味があります.
1.算術演算の乗数【演算子として】:
int a = 1;
int b = 2;
int c = a * b;
2.「ポインタデータ型」を表す【データ型の構成部分として】
int num = 1;
int* a = #
3.ポインタ演算の「内容取り」【演算子として】
int num = 2;
*a = num;
以上のアスタリスク*の理解によれば、ポインタの定義初期化の書き方はフォーマット3を採用することで言語の本質を体現することができ、このようなコードを読むと誤解を招くことなくスムーズになると思います.