web-dev-qa-db-ja.com

C ++のint * xとint * xに違いはありますか?

私はC++の研究に戻り、基本を本当に理解しようとしています。ポインターはいつも私に問題を与えてきました、そして私が続けて道を混乱する前に私が本当にそれを手に入れることを確かめたいです。

悲しいことに、私は読んでいるチュートリアルの一貫性の欠如に最初から悩まされてきました。この方法でポインター宣言を行うものもあります。

int *x

そしていくつかはこのようにそれをします:

int* x

現在、前者が最も一般的であるように思われます。 2番目の方が私にははるかに理にかなっているので、これは動揺しています。 int * xを読むと、「ここにintがあり、その名前は* x」と読みますが、これは正しくありません。しかし、2番目を読むと、「ここにintポインターがあり、その名前はxです」と表示されます。これはかなり正確です。

それで、私が自分のメンタルマップを作成する前に、2つの間に機能的な違いはありますか?第二の方法でやったら、ハンセン病の追放者になるのでしょうか?

ありがとう。

12
Adam McKeown

有名な Bjarne Stroustrup 、C++の作成と開発で有名だと...

「int * p;」からの選択および「int * p;」正しいことと間違っていることではなく、スタイルと強調についてです。 Cは表現を強調しました。宣言はしばしば必要な悪に過ぎないと考えられていました。一方、C++は、型に重点を置いています。

「典型的なCプログラマー」は「int * p;」と書きます。そして、構文を強調する「* pはintとは何か」を説明し、スタイルの正確さを主張するためにC(およびC++)宣言文法を指す場合があります。実際、*は文法の名前pにバインドされます。

「典型的なC++プログラマー」は「int * p;」と書きます。そして、タイプを強調する「pはintへのポインタ」であると説明しています。実際、pの型はint *です。私は明らかにその強調を好み、C++のより高度な部分をうまく使用するためにそれが重要であると考えています。

したがって、違いはありません。これは単なるコードスタイルです。

から ここ

15

コンパイラにとって、それらはまったく同じ意味を持っています。

様式的には、両方に賛成と反対の議論があります。

1つの議論は、2番目のバージョンが次の理由で最初のバージョンが好ましいということです。

int* x, y, z;

xy、およびzはすべてポインタであり、そうではないことを意味します(xのみ)。

最初のバージョンにはこの問題はありません:

int *x, y, z;

つまり、*は型ではなく変数名にバインドされるため、変数名のすぐ隣に配置するのが理にかなっています。

反論は、同じ宣言にポインタ型と非ポインタ型を混在させてはならないというものです。そうでない場合、上記の引数は適用されず、*intのすぐ隣に配置するのが理にかなっています。これはtype

どちらの学派を購読することに決めたとしても、実際には両方のスタイルに遭遇するでしょう(int * xと書く人もいます)。

10
NPE

まったく違いはありません。

それはただのスタイルの問題です。

個人的にこれを好む:

int *x;

これ以上、

int* x;

同じ行で多くの変数を宣言すると、後者は読みにくくなるためです。たとえば、次を参照してください。

int* x, y, z;

ここで、xintへのポインターですが、yzのポインターもありますか?それのように見えますそれらはポインタですが、ではありませんです。

4
Nawaz

違いはありません。 _int* x_形式を使用するのは、すべての型を名前からグループ化しておくことを好むためですが、その種類はint (*x)[10]のようなより複雑な型とは異なります。

_int *x_を好む人もいます。これは、「xを逆参照するとintが得られる」と読むことができるためです。しかし、参照型を使い始めると、それでも崩壊します。 _int &x_は、xのアドレスを取得するとintが得られるという意味ではありません。

_int *x_を好むもう1つの理由は、文法の観点から、intが宣言指定子シーケンスであり、_*x_が宣言子であるためです。それらは宣言の2つの別々の部分です。これは、_int *x, y;_のような複数の宣言子がある場合にさらに明白になります。この場合、yがポインタではないことがわかりやすいかもしれません。

ただし、私のように、多くの人は1つの宣言で複数の変数を宣言しないことを好みます。 C++ではそれほど必要はありません。これが、_int* x_フォームを好むもう1つの理由かもしれません。

ルールは1つだけです。一貫性を保つことです。

3

まったく違いはありません。

1
user1949346

変わりはない。私は好む傾向があります

int* x

'x'をint *型であると考えているため。

1
Ian Lee

コンパイラにとって、それらは同じです

しかし同時に、複数の変数がある場合の違いは読みやすさです

int * x、y

ただし、これはより誤解を招く可能性があります

int * x、y

1
Pradheep

どちらも同じものです。

前者が好ましいが。同じ行で2つのポインタpとqを宣言するとします。

int * p、q;

これは実際には、「p」がintへのポインタであり、「q」がintであることを意味します。

正しい構文は次のとおりです。

int * p、* q;

したがって、ポインタの名前に*を含めます。

0
sicko

これは一種のコーディングスタイルです。違いはありません、あなたが自分で言ったように好みの問題です。明確に願っています。コーディングをお楽しみください

0
Arun Chandran C