2012-05-04 5 views

答えて

16

あなたの前提が間違っています。最初のものはポインタ型で、2番目のものはうまくいきます...何もない、それは有効なC++ではありません(どちらもCではありません)。 静的配列は、より多くのこのようなものです:

char var[15]; 

動的配列は、通常、vectorsで行う一方です。

配列とポインタの間で混乱が*(a+n)a[n]は同じことを意味Cプログラミング言語からの遺産であるので、我々はaがポインタではなく配列であってもa[n]を使用することができます。これはC++ではあまり慣用的ではありません。

+0

+1助けてくれてありがとう –

7

char* var;は、「charへのポインタ」であると、varが宣言しています。 char var*;は有効な宣言ではありません。

配列は、char var[10];のように宣言されます。

+2

他のもの: 'std :: array var;' – chris

+3

@chrisこれは配列ではない、それは 'std :: array'です。しかし、ええ、私はそれをお勧めしたい。 –

+0

@classdaknok_t、これは利用可能なリソースがある場合に使用するのに理想的な静的配列です。 – chris

3

これはポインタです:

char* var;

これは文法的に間違っている、とコンパイルされません:C++での

char var*; 

配列とポインタ同じことではありませんが、シンタックスのように見えるかもしれません。あなたはこのようにC++での配列を宣言することができます。

char ary[] = {'a','b','c'}; 

...これは有効である - の3つの要素で作成された配列が存在します。

またポインタとる関数を作成することができます

void foo(char* bar) 
{ 
// ... 
} 

を...そしてそれをaryを渡す:

foo(ary); 

...そしてそれは、コンパイルと正常に動作します。これはポインタと配列が同じものだと信じさせるかもしれません。しかし彼らはそうではありません。 bar上記のfooは配列ではありません。配列の最初の要素を指すポインタです。

+0

'foo(ary);'の呼び出しで、 'ary'が必要なポインタに崩壊することに言及する価値があります。 – chris