c中常量char*[]的指针赋值

c中常量char*[]的指针赋值,c,arrays,pointers,char,constants,C,Arrays,Pointers,Char,Constants,我想给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

我想给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;
}
#包括
const char*keyContainer[2]={“test”,“test2”};
const char*keyPtr=&keyContainer;
内部主(空)
{  
printf(“%s\n”,keyPtr[0]);//测试
printf(“%s\n”,keyPtr[1]);//test2
返回0;
}

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

使用此选项时,您会收到警告“从不兼容的指针类型初始化[默认启用]”,这是因为
keyContainer
char*[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;
}
#包括
const char*keyContainer[2]={“test”,“test2”};
const char**keyPtr=keyContainer;
内部主(空)
{
printf(“%s\n”,keyPtr[0]);
printf(“%s\n”,keyPtr[1]);
返回0;
}

希望这能有所帮助!

你什么意思你不能?你尝试了什么?结果是什么?一个好的开始应该是正确声明指针。由于指针类型不兼容,你应该给出一个编译时错误。好的,你是对的,我应该在下次发布之前编译代码我倾向于查看动态数组初始化这是一个糟糕的想法(也是对C语言的一个糟糕的添加)。
keyContainer
应该是静态的。我完全同意你的观点,但这是为了解释指针初始化不好的原因。最好将
keyContainer
放在函数之外(为了简单起见,可能还有
keyPtr
)当然,但这只是一个例子,我把他的代码放在一个主函数中。我会编辑这个。