web-dev-qa-db-ja.com

C複数の単一行宣言

1行に複数の変数があると宣言するとどうなりますか?例えば.

int x, y, z;

すべてintです。問題は、次のステートメントのyとzは何ですか?

int* x, y, z;

それらはすべてintポインタですか?

29
ruralcoder

あなたの最初の文で:

int x, y, z;

それらはすべてintsです。

ただし、2番目のものでは:

int* x, y, z;

xのみがintへのポインタです。 yzはプレーンなintsです。

それらすべてをintsへのポインタにしたい場合は、次のことを行う必要があります。

int *x, *y, *z;
8

Xだけがintポインタです。 YとZはちょうどintになります。 3つのポインターが必要な場合:

int * x, * y, * z;
7
Macmade

Cでは、宣言が使用法を模倣していることを知っておくことが重要です。 *単項演算子は、Cでは右結合です。したがって、たとえばint *xでは、xはint(またはint-star)へのポインター型であり、int xでは、xはint型です。

他の人も言及しているように、int* x, y, z;では、Cコンパイラはxをint-starとして宣言し、yとzを整数として宣言します。

3
hyde