2015-04-01 32 views
0

我可以做到这一点没有问题:等值排列

const char* foo = "This is a bare-string"; 

我要的是能够做同样的事情用一个数组:

const int* bar = {1, 2, 3}; 

显然,该代码没有按没有编译,但有没有相当于裸线的数组?

+0

'const int bar [] = {1,2,3};'? – NathanOliver 2015-04-01 15:37:13

+0

@NathanOliver显然有效的权利。我问的是'这个'与'{'T','h','i','s'}'有什么不同?那里有一个''This'等价于数字数组吗? – 2015-04-01 16:40:59

回答

1

你不能做到这一点:

const int* bar = {1, 2, 3}; 

但你可以这样做:

const int bar[] = {1, 2, 3}; 

原因是C(或C++)char *来有一个附加功能,除了为工作一个字符指针,它也可以作为一个 “C字符串”,从而添加的初始化方法(特别对于char *):

const char* foo = "This is bare-string"; 

最佳。

+0

也许你可以详细说明一下吗?是“C字符串”某种隐藏的特殊对象吗?请注意,你不能在C++中做到这一点:'const char * foo = {'T','h','i','s'};' – 2015-04-01 16:38:57

+0

C字符串与char *相同,它不是隐藏的特殊对象。 C字符串是从std :: string中调用.c_str()时得到的。 唯一的区别是char *(或C字符串)有一个特殊的初始化,例如你不能在int *中找到类似的初始化版本。 这就像是: 'char foo [] = {'S','t','r','i','n','g'}; 字符*巴= &foo;' 在一个单一的,更加可读的方式: '字符*巴= “字符串”;' – 2015-04-01 17:11:33

+0

也许等效版本将是这样的: 'INT富[] = {1,2, 3}; int * bar = &foo;' 但是你没有“缩写”版本: 'int * bar =“123”; O.O' – 2015-04-01 17:34:01