g ++を使用しています。私はmain(int,char**)
のコードを使用していますので、私はそれを呼び出すことができます。私はShould I use char** argv or char* argv[] in C?を見て、char**
はchar* []
に相当すると言います。これは、C++関数呼び出しでは当てはまりません。たとえば: C++:function arg char **はcharと同じではありません* []
void f1(char** p){;}
void f2(char* p[]){
f1(p);
//...`
}
は、コンパイラが、私は配列はコールのためのポインタに変換されていることを言って見ての参照を「...
char**
から
char (*)[]
変換できません」文句で失敗しますが、これはそうではないようです次のようになります。
void f3(char* [] p);
char caa[16][16];
f3(caa);
も失敗します。インダイレクションのレベルが同じであれば(例えば、char*** ptr
とchar[][][] carray
)、タイプは互換性があると私は想定していました。
誰かがこれらの問題を明確にするために参照できる参考資料を提供できますか?
ありがとうございました。
実際、私はURLを期待していました。あなたが何を言っているのか分かりません。 char ** equivはchar * []になりますか?それは私には思われる: char c; char * cp =&c; 'char ** cpp = &cp;' char * cparray [128]; cparrayとcppは同等ではありません。 &T [n] - > T *はありませんか?私が取り組もうとしている問題は、関数呼び出しの引数で変換が行われていることです。私が今使っているリファレンスは、O'Reilly C++ in a Nutshellです。 「ISO C++ 03、4.2 [conv.array]」はWeb上で入手できますか?それとも、出版社から注文しなければならない文書ですか? – cvsdave
引数型に適用すると、関数宣言では同じですが_only_です。また、 'char * []'は 'char **'に暗黙的に変換可能ですが、 'char [] []'はそうではありません。 –
ISO C++はC++言語標準の仕様です。言い換えれば、C++言語の正確な構文とセマンティクスを定義する主要なドキュメントです。 PDFは$ 30で購入することはできますが、ここでは無料ではありません:http://www.techstreet.com/cgi-bin/basket?action=add&item_id=3626517 –