1. ホーム
  2. c

配列がポインタに減衰する例外?

2023-09-11 11:33:57

質問

多くの投稿で、"ほとんどの場合、配列名はポインタに崩壊する"と書かれているのを見ました。

私はどのようなケース/式で配列名がその最初の要素へのポインタに減衰しないかを知ることができますか?

どのように解決するのですか?

もちろんです。

C99では、次の3つの基本的なケースがあります。

  1. の引数であるとき & (address-of)演算子で指定します。

  2. の引数であるとき、それが sizeof 演算子を使用します。

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

さらに、C11では、新しく導入された alignof 演算子もその配列の引数をポインタに減衰させません。

C++では、参照渡しされる場合など、追加のルールがあります。