我有一个带有以下声明的函数:
static void FindStrColumnHeaderSpacing(const char * const *str);
当我使用char**
变量调用它时,gmake抛出:
warning: passing argument 1 of 'FindStrColumnHeaderSpacing' from incompatible pointer type
inq.c:1402:13: note: expected 'const char * const*' but argument is of type 'char **'
现在,我的理解一直是将非const数据的指针作为参数发送到函数"升级"指针的数据变为常量,没有问题。这仅适用于第一个(或最后一个)间接层吗?
在这种情况下,简单地接受char**
会有什么问题?毕竟,const char * const *
参数是一个承诺,函数不会改变指针指向的内存块,也不会改变存储在该内存中的实际数据。而且,即使函数违背了这个承诺,传递的变量也完全是非常量的,所以它甚至不会关心。