const
私はキーワードについて非常に混乱しています。文字列の配列を入力パラメーターとして受け入れる関数と、可変数の引数を受け入れる関数があります。
void dtree_joinpaths(char* output_buffer, int count, ...);
void dtree_joinpaths_a(char* output_buffer, int count, const char** paths);
dtree_joinpaths
dtree_joinpaths_a
引数リストから文字列の配列を作成した後、内部的に呼び出します。
void dtree_joinpaths(char* output_buffer, int count, ...) {
int i;
va_list arg_list;
va_start(arg_list, count);
char** paths = malloc(sizeof(char*) * count);
for (i=0; i < count; i++) {
paths[i] = va_arg(arg_list, char*);
}
va_end(arg_list);
dtree_joinpaths_a(output_buffer, count, paths);
}
しかし、gcc
コンパイラは次のエラーメッセージを表示します。
src/dtree_path.c: In function 'dtree_joinpaths':
src/dtree_path.c:65: warning: passing argument 3 of 'dtree_joinpaths_a' from incompatible pointer type
に変更char** paths = malloc(count);
するとconst char** paths = malloc(count);
、このエラーは表示されなくなります。私が理解していないのは、それです
- アドレスへのポインターは常にconstポインターにキャストできると思いましたが、その逆はできません(これは、ここでimoで起こっていることです)。
- この例は機能します:http://codepad.org/mcPCMk3f
私は何を間違っているのですか、それとも私の誤解はどこにありますか?
編集
私の意図は、入力データのメモリを関数に対して不変にすることです。(この場合はpaths
パラメーター)。