const char*とchar*、const char**とchar**の付与について

1495 ワード

私は「io.h」の_findfirstで発生した問題:問題の説明:findfirstはlong型を返します.long _findfirst(const char , struct _finddata_t );検索は成功してハンドルを返して、さもなくば-1を返して、しかし私はファイルの経路をこの関数に伝えようとする時、出会ったパラメータの伝達の誤り、最初、私の実参はconst char*="*です.「またはchar=」*.*、しかし、いつも間違っています.解決策は:string dir="*.「メソッドlong_findfirst(dir.c_str(),&file)を呼び出します.パスをstringタイプとして定義し、stringをcharタイプに変換します.次の内容は次のとおりです.http://www.cnblogs.com/chenleiustc/archive/2011/04/09/2010647.htmlANSI C規格による付与制約:1.両方のオペランドは、限定子または無限の固定子を持つコンプライアンスタイプを指すポインタです.2.左ポインタが指すタイプには、右ポインタが指すタイプのすべての制限子が必要です.一、const char*とchar*const char*のタイプは、「const制限子を持つcharタイプへのポインタ」です.(値は変更できません)char*のタイプは、「charタイプへのポインタ」です.. したがってconst char*とchar*はcharタイプを指すポインタですが、const char*が指すcharタイプはconstです.したがって、コードについてはchar*src;const char* dest ; dest = src; *オペランドがcharタイプを指すため、このように値を割り当てるのは正しいです.したがって、互換性のある*左オペランドはオペランドが指すタイプのすべての制限子(右オペランドには制限子がない)を有し、同時に自分で制限子がある(const)逆に値を割り当てると値を付ける制約に違反します.srcが指すオブジェクトの値は変更できますが、destが指すオブジェクトの値は変更できません.srcがdestが指す変更できないオブジェクトを指すようにすれば、合法的に変更できるのではないでしょうか.src=dest;//このように値を付けると、左操作数が指すタイプには右操作数がクラスを指すことはありません.型のconst限定子は、制約条件2二、const char**、char**const char**に合致しないタイプで、「const限定子のあるcharタイプへのポインタ」です.char**のタイプは、「charタイプのポインタを指すポインタ」です.const char**とchar**では、両方とも制限子のないポインタタイプですが、それらが指すタイプは異なり、前者はchar*を指し、後者はconst char*を指すため、互換性がありません.したがって、char**タイプのオペランドはconst char**クラスのオペランドに値を割り当てることはできません.すなわち、次のコードについて、コンパイラはエラーを報告します:char**src;const char** dest; dest = src; //error: invalid conversion from char**' to const char**’