2013-07-19 3 views
44

私は多くの記事で、 "配列名がポインタに崩壊するケースの大部分"を見てきました。
配列名が最初の要素へのポインタに崩壊しないケース/式を知ることができますか?配列への例外は、ポインタに崩壊しないか?

+2

さらに詳しい情報が必要です:特定の言語で作業していますか?例がありますか? – abiessu

+0

はC言語を考慮する。そして、私は配列名がポインタに崩壊しない例を探しています。 –

+1

@ TheJoker私はこのケースを示している[ここで答え](http://stackoverflow.com/questions/15177420/what-does-sizeofarr-return/15177499#15177499) –

答えて

45

C99では

、すなわち3つの基本的な例がある:

  1. それは&(アドレスの)演算子の引数があります。

  2. これはsizeof演算子の引数です。

  3. それはタイプchar [N + 1]又はchar str[] = "foo";又はwchar_t wstr[] = L"foo";のように、配列を初期化するために使用されるタイプwchar_t [N + 1]のリテラルワイド文字列(Nは、文字列の長さ)のリテラル文字列です。

また、C11で、新たに導入されたalignofオペレータは、いずれかのポインタにその配列引数減衰をさせません。

C++には、参照渡しなどの追加規則があります。

+0

申し訳ありませんが、第3のケースをより明確に説明できますか?私は文字列のメモリ位置を参照するために使用された3番目のケースの* str *ではないことを意味しますか?それでポインタが再び? –

+2

@TheJokerいいえ、それは 'const char * str_ptr =" literal ";'になります。私の例では、 'str'は配列として宣言されているので、**は**配列です。 –

+0

@GrijeshChauhanありがとう:) –

関連する問題