繁体   English   中英

如何将变量声明为 char* const*?

[英]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但无论使用声明charconst*排列,我都会得到 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM