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:ポインタ配列の初期化
簡単に言うと"aaa"はポインタ値だけど、{ 'a', 'b', 'c', '\x0', }や{ 1, 2, 3, },はポインタじゃないから。
char *table[/url]と書くとポインタ値でしか初期化できません。
"aaa"はaaaという文字列リテラルのポインタ値だから問題ないのです。
char *table[/url]と書くとポインタ値でしか初期化できません。
"aaa"はaaaという文字列リテラルのポインタ値だから問題ないのです。
-
Naohiro19
Re:ポインタ配列の初期化
error C2440: '初期化中' : 'int' から 'int *' に変換できません。
整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。
整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。
-
ぺん
Re:ポインタ配列の初期化
ざっくりとした質問に回答していただいて、有難うございます。
なんとなく"aaa"等の文字リテラル(char配列)からポインタ値を生成して初期化が出来るのあれば、
同様に{ 'a', 'b', 'c', '\x0', }や{ 1, 2, 3, }等のchar/intリテラル(char/int配列)の
ポインタ値を生成して初期化できると考えたのですが、コンパイラは後者の場合は対応できないのですね。
当然ですが以下の様にすれば、コンパイルできました。
-----
ご回答いただいた皆様に、重ねてお礼を申し上げます。
なんとなく"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,
};
個人的には余計な配列を宣言しないで、初期化できると気分的にスッキリするのですが。-----
ご回答いただいた皆様に、重ねてお礼を申し上げます。