1

以下は私のCコードです:

const char *l = "some text";
const char * const *m = {l};

そのコードをコンパイルしようとすると、次の警告が表示されます。

警告:互換性のないポインタ型からの初期化

誰かがその警告の理由と2番目の変数()を初期化する方法を説明できますmか?

4

2 に答える 2

3

実際、あなたはconstキーワードを正しい方法で使用していません。const出会う最初の左のトークンに適用されます。ない場合は、最初の右のトークンに適用されます。

だから、あなたの場合:

const char * const *m;

1つ目は、の場合と同様に、にconst適用されます。2番目のものは最初のものに適用されます。これは、mが定数コンテンツ(「テ​​キスト」)への定数ポインターへのポインターであることを意味します。あなたが書いていなかったのでcharl*

const char * const l;

2つのポインタの定数と競合しているため、警告が表示されます。

lに保存されているアドレスがプログラムによって変更されないことを保証することが必要だと思います。その場合は、の宣言を次のように変更する必要がありますl

const char * const l = "some text";
于 2013-03-08T13:05:03.913 に答える
2

使ってみませんか

const char* m[] = {l};

私はそれがうまくいくはずだと思います。

私はあなたが実際に複数の要素の長さを意図していると想像しますm、さもなければあなたはそれほど複雑なことをしないでしょう?

于 2013-03-08T13:01:48.387 に答える