[英]How to declare a variable as char* const*?
我有一个 bluez 头文件get_opt.h
,其中argv
是一个参数:
extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv,.....
argv
需要char* const*
。 因为该单元是从不同的文件中调用的,所以我试图模拟argv
但无论使用声明char
、 const
和*
排列,我都会得到 unqualified-id 或编译器抱怨不转换为char* const*
。 当然,我可以轻松获得const char *
。 char const * argv = "0";
在 Netbeans 中使用 C++14 编译正常,但是
char * const * argv = "0";
产生
“错误:无法在初始化中将‘const char *’转换为‘char * const *’”(原文如此)。
你如何声明char* const*
或者我是否将 C 与 C++ 混合在一起,所以我走错了树?
让我们回顾一下指针声明:
char * -- mutable pointer to mutable data.
char const * -- mutable pointer to constant data.
char * const -- constant pointer to mutable data.
char const * const -- constant pointer to constant data.
从右到左读取指针声明。
看看描述,你想要哪种指针?
因为 void main(void) 在不同的文件中,所以我试图模拟 argv
void main(void)
不是正确的主函数声明。 main
函数必须有int
返回值。
只需将该“其他”文件中的void main(void)
更改为int main(int argc, char **argv)
。
它不需要传递给char const *
。 不要更改main
函数参数的类型。
int getopt_long (int ___argc, char * const *___argv);
int main(int argc, char **argv)
{
printf("%d\n", getopt_long(argc, argv));
}
两种语言都编译得很好: https : //godbolt.org/z/5To5T931j
信用@JaMiT以上
【不知道怎么接受评论】
此外,您可能想注意如何从该示例中删除对
getopt_long()
的调用,同时保留错误(这是您声明的动机,但不是问题的根源)。 如果您充分考虑您的演示文稿,您可能会意识到您的问题不是如何声明char* const*
而是如何初始化它。 由于数组衰减为指针,您可以声明一个指针数组(char* const argv[]
)而不是指向指针的指针(char* const * argv
)。 请参阅 A: 2D 指针初始化的一维指针数组部分,了解如何初始化这样的野兽。 当心:鉴于您的设置,该答案中的“二维阵列方式”不是一种选择。 提醒:参数向量中的最后一个指针为空;argv[argc] == nullptr
当这些值由系统提供给main()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.