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

时间:2013-04-03 07:41:05

标签: c gcc types

我有以下代码:

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

什么数据类型是&name[0]?海湾合作委员会抱怨。它不是const char **,因为GCC抱怨这个:

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

"note: expected 'const char ** ' but argument is of type 'char **' "

是const char * const还是什么?头痛正在进行中......

什么数据类型是&name[0]?我不想错误地修复这个编译错误。

3 个答案:

答案 0 :(得分:4)

如果您使names指针数组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);

}

Live Example

如果您想要地址,可以这样做:

 const char* addr = &(*names[0]); //print addr gets "apples"
 const char** add = &names[0]; //print add gets 0x7fff14531990

答案 1 :(得分:4)

正确地说,您的数组应该看起来像

const char* names[] = {"apples", "oranges", "grapes"}; // array of pointer to char

现在,当你申请

name[0];

这会将地址返回给第一个元素。 ( “苹果”)

而不是

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

const char* first_name = name[0];

所以你得到数组中的第一个字符串。

答案 2 :(得分:2)

以来,这个问题存在缺陷
const char* names = {"apples", "oranges", "grapes"};

初始化const char*标量,好像它是一个数组。