const char*的地址是什么数据类型?

const char*的地址是什么数据类型?,c,gcc,types,C,Gcc,Types,我有以下代码: const char* names = {"apples", "oranges", "grapes"}; 什么数据类型是&名称[0]?GCC正在抱怨。它不是const char**因为GCC正在抱怨: const char** address_of_first_name = &name[0]; "note: expected 'const char ** ' but argument is of type 'char **' " 是常量char*const还是什么?

我有以下代码:

const char* names = {"apples", "oranges", "grapes"};
什么数据类型是
&名称[0]
?GCC正在抱怨。它不是const char**因为GCC正在抱怨:

const char** address_of_first_name = &name[0];

"note: expected 'const char ** ' but argument is of type 'char **' "
是常量
char*const
还是什么?头痛正在进行中


什么数据类型是
&名称[0]
?我不想错误地修复此编译器错误。

如果您将
名称
设置为指针数组
const char*names[]
并像您那样初始化它们,则可以执行以下操作:

#include <stdio.h>

int main()
{
   const char* names[] = {"apples", "oranges", "grapes"};

   const char* first = names[0];
   const char* second = names[1];
   const char* third = names[2];

   const char* foo = &(*names[0]);

   printf("%s", foo);
   printf("%s", second);
   printf("%s", third);

}

这一问题是有缺陷的,因为

const char* names = {"apples", "oranges", "grapes"};

初始化
常量字符*
标量,就像它是一个数组一样。

正确地说,数组应该如下所示

const char* names[] = {"apples", "oranges", "grapes"}; // array of pointer to char
现在,当你申请时

name[0];
这将返回第一个元素的地址。(“苹果”)

而不是

const char** first_name = &name[0];
试一试


因此,您得到数组中的第一个字符串。

为了一致性:您的变量名是
names
还是
name
?@B.Nadolson:
const char*names={“apples”、“oranges”、“grapes”}
已经不可编译,毫无意义,并且严重影响问题的含义。我怀疑这不是一个真正的声明,因为您得到的错误消息是不可能与此声明。请发布真实代码。@jogojapan你说得对,我想得不好。我试图简化代码示例。我认为这是无法解决的,我最好提交一个不同的问题。我认为我的代码简化有致命的缺陷。很抱歉真正的代码包含一个函数和一个不容易理解的预处理器定义的数组。现在你让一切变得更加混乱。@PerJohansson好吧,这是
C
,毕竟^^万岁!指针!我的意思是你的回答是错误的,没有帮助。第一行是对的,但其余的都不对。我给自己一个F作为例子。我不想要字符串,我想要第一个元素的地址。我应该叫它名字以外的名字。我的主要问题措辞失败。在这种情况下,
&name[0]
的类型为
const char**
,它是数组的第一个元素的地址,而不是字符串的地址。我编辑了我的问题,以便更好地解释我的目的。我的措辞很糟糕,我试图找出访问第一个元素地址的数据类型(即doing&(const char*)是什么数据类型?)@B.Nadolson我已经在我的答案中添加了您想要的内容。-1请使用与问题中使用的相同的编程语言进行回答。@Lundin我已将其完全更改为C。尽管用无效的过度简化将问题弄糟了一点,但我发现我并没有发疯,并发现了问题所在。很抱歉指向常量字符*的指针是一个常量字符**,就像逻辑所规定的那样,真正的代码是错误的。对不起,我把这个例子搞砸了。很抱歉
const char** first_name = &name[0];
const char* first_name = name[0];