我有以下代码:
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]
?我不想错误地修复这个编译错误。
答案 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);
}
如果您想要地址,可以这样做:
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*
标量,好像它是一个数组。