声明指针数组字符数组
我怎么就可以这样做:声明指针数组字符数组
char a[] = {1, 2};
char b[] = {3, 4, 5};
const char *r[] = {
a, b
};
但我不能做这种方式:
const char *r[] = {
{1,2}, {3,4,5}
};
是否有初始化数组任何捷径指向不同长度数组的指针?
此代码不起作用,
const char r[][] = {{1,2}, {3,4,5}};
失败:
x86-64 gcc 5.1!!error: declaration of 'r' as multidimensional array
must have bounds for all dimensions except the first
修复它像这样:
const char r[][3] = {{1,2}, {3,4,5}};
侧面说明:这是一个坏练习在C++中使用类C数组使用std: :数组,如果你知道你的值在编译时。
编辑:
你可以做到这一点丑陋的黑客(它编译,但我不知道有多少火箭发射)。
const char *r[] = { (const char[]){1,2}, (const char[]){1,2,3}};
有没有简单的解决方案,以实现你要找的语法:这些指针必须在一些阵列点,而这些数组必须有足够的寿命。
您可能希望它们是自动的,这意味着您将它们声明为局部变量。
您可以达到那种你想通过动态分配什么,即:
const char *r[] = {
new char[]{1,2}, new char[]{3,4,5}
};
...在这种情况下,阵列将有足够的寿命,但你有delete[]
荷兰国际集团他们的负担在正确的时间。并非真正的解决方案。
第一种形式的工作原理是,当像这样使用时,每个数组的名称被转换为指针(指向其第一个元素)。由于转换结果为char *
,因此可将其存储在char *
的数组中。
第二种形式不起作用,因为{1,2}
和{3,4,5}
是(数组的初始值),并且数组不是指针。一个未命名的数组(这些都是)不能隐式转换为指针。
第一种形式是初始化指针数组的唯一快捷方式,因此每个指针都指向数组的第一个元素。
通常情况下,您最好使用标准容器(例如std::vector<std::string>
),并避免指针(以及数组名称向指针的转换)的复杂性。
你不能写:
const char *r[] = { {1,2}, {3,4,5} };
,因为你不能写:
r[0] = 1, 2, 3; // but you can r[0] = "1, 2, 3";
来初始化指针数组为char,您可以:
const char *r[] = {
{"1,2"}, {"3,4,5"}};
因此R一个指向char的指针数组。
等效会比较像'R [0] =“\ X01 \ X02 \ X03是immediade UB “'。 – Jarod42
由于'{1,2}'不是指针为'char'。 –
谢谢。对我最后一个问题的任何建议? – John
@SamVarshavchik:是的。所以他可以写:'{“1,2”}' – Raindrop7