我对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
参数)。