ポインタ配列の初期化

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ぺん

ポインタ配列の初期化

#1

投稿記事 by ぺん » 15年前

1はOKなのに、2,3がエラーなのはどうして?

1.これはOK
char *table[/url] = {
    "aaa",
    "bbbb",
    "cc",
};

2.これはエラー
char *table[/url] = {
    { 'a', 'b', 'c', '\x0', },
    { 'd', 'e', '\x0', },
    { 'g', 'h', 'i', 'j', '\x0', },
};

3.これはエラー
int *table[/url] = {
    { 1, 2, 3,  },
    { 4, 5,     },
    { 6, 7, 8, 9, },
};

softya

Re:ポインタ配列の初期化

#2

投稿記事 by softya » 15年前

簡単に言うと"aaa"はポインタ値だけど、{ 'a', 'b', 'c', '\x0', }や{ 1, 2, 3, },はポインタじゃないから。
char *table[/url]と書くとポインタ値でしか初期化できません。
"aaa"はaaaという文字列リテラルのポインタ値だから問題ないのです。

Naohiro19

Re:ポインタ配列の初期化

#3

投稿記事 by Naohiro19 » 15年前

error C2440: '初期化中' : 'int' から 'int *' に変換できません。
整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。

ぺん

Re:ポインタ配列の初期化

#4

投稿記事 by ぺん » 15年前

ざっくりとした質問に回答していただいて、有難うございます。

なんとなく"aaa"等の文字リテラル(char配列)からポインタ値を生成して初期化が出来るのあれば、
同様に{ 'a', 'b', 'c', '\x0', }や{ 1, 2, 3, }等のchar/intリテラル(char/int配列)の
ポインタ値を生成して初期化できると考えたのですが、コンパイラは後者の場合は対応できないのですね。

当然ですが以下の様にすれば、コンパイルできました。
int tb_a[/url] = { 1,2,3,   };
int tb_b[/url] = { 4,5,     };
int tb_c[/url] = { 6,7,8,9, };

int *table[/url] = {
  tb_a,
  tb_b,
  tb_c,
};
個人的には余計な配列を宣言しないで、初期化できると気分的にスッキリするのですが。
-----
ご回答いただいた皆様に、重ねてお礼を申し上げます。

閉鎖

“C言語何でも質問掲示板” へ戻る