中の化合物リテラルへのポインタを初期化すると、ポインタを初期化するのそれほど一般的ではない方法である:ここここC
int *p = (int[10]){[1]=1};
、ポインタポイントは、複合リテラルです。
#include <stdio.h>
int main(void)
{
int *p = (int[10]){[1]=1};
printf("%d\n", p[1]);
}
出力:
1
このプログラムはコンパイルされ、G ++コンパイラで正常に実行されます。
ので、
は、それが複合リテラルへのポインタを初期化する正しい方法は何ですか?または
複合体リテラルへのポインタを初期化する動作は未定義ですか?
'int p [10];'と 'p [1] = 1'を設定した後で(きれいにコーディングしたい場合) – YaatSuka
"無名配列要素 "ではなく"コンパウンドリテラル "と呼ばれることがあります。そうでなければ質問しましょう:これまで何もポインタに変換せずにこのような複合リテラル*を使う方法はありますか?いいえ、唯一の疑問は複合リテラルの存続期間です。 –
"ポインタを初期化する正しい方法ですか?"あなたがそれでやりたいことに依存します。コードは 'int arr [10] = {[1] = 1}と100%等価です。 int * p = arr; 'ローカルスコープの配列が必要な場合は、どちらも問題ありません。 – Lundin