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, }, };
ポインタ配列の初期化
ポインタ配列の初期化
Re:ポインタ配列の初期化
簡単に言うと"aaa"はポインタ値だけど、{ 'a', 'b', 'c', '\x0', }や{ 1, 2, 3, },はポインタじゃないから。
char *table[/url]と書くとポインタ値でしか初期化できません。
"aaa"はaaaという文字列リテラルのポインタ値だから問題ないのです。
char *table[/url]と書くとポインタ値でしか初期化できません。
"aaa"はaaaという文字列リテラルのポインタ値だから問題ないのです。
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, };個人的には余計な配列を宣言しないで、初期化できると気分的にスッキリするのですが。
-----
ご回答いただいた皆様に、重ねてお礼を申し上げます。