【问题标题】:pointer assignment to const char*[] in cc 中 const char*[] 的指针赋值
【发布时间】:2016-06-23 12:46:11
【问题描述】:

我想像这样分配一个指向 const char* 数组的指针:

#include <stdio.h>


const char *keyContainer[2]= {"test", "test2" };
const char *keyPtr = &keyContainer;


int main(void)
{  
   printf("%s\n", keyPtr[0]);     //test
   printf("%s\n", keyPtr[1]);     //test2

   return 0;
}

keyPtr 包含 keyContainer 的地址,但我无法访问 keyContainer 的内容。

【问题讨论】:

  • 你不能是什么意思?您尝试了什么,结果如何?
  • 正确声明指针是一个很好的起点。由于指针类型不兼容,您应该给出编译时错误。
  • 好吧,你是对的,我应该在下次发布之前编译代码

标签: c arrays pointers char constants


【解决方案1】:

当您使用它时,您会收到警告“从不兼容的指针类型初始化 [默认启用]”,这是因为 keyContainerchar *[2],我们会说它可以相似 (不一样!)与char **。所以你需要使用const char **keyPtr = keyContainer;

例如:

#include <stdio.h>

const char *keyContainer[2]= {"test", "test2" };
const char **keyPtr = keyContainer;

int main(void)
{
   printf("%s\n", keyPtr[0]);
   printf("%s\n", keyPtr[1]);

   return 0;
}

希望这会有所帮助!

【讨论】:

  • 我倾向于将动态数组初始化视为一个坏主意(以及对 C 语言的一个坏补充)。 keyContainer 应该是静态的。
  • 我完全同意你的看法,但这是为了解释为什么指针初始化错误。
  • 最好将keyContainer 放在函数之外(为了简单起见,也可能是keyPtr)。
  • 嗯,当然,但这只是一个例子,我把他的代码放在一个主函数中。我会编辑这个。
猜你喜欢
  • 2011-12-05
  • 1970-01-01
  • 2013-05-15
  • 2019-10-31
  • 1970-01-01
  • 2013-06-12
  • 2016-06-10
  • 2023-03-03
  • 2021-08-18
相关资源
最近更新 更多