如何将int *转换或转换为int [x]?
作为示例,我尝试将指针int* c = new int[x]
强制转换为数组int b[2]
int b[2] = { 2, 3 };
int* c = new int[b[1]];
c[0] = b[0];
c[1] = b[1];
c[2] = a;
首先,我知道我可以遍历指针和数组。因此,将指针转换为具有[]
运算符的数组,以索引指针和数组,在迭代时将指针元素分配给数组元素(例如arr[i] = p[i]
)。我想知道在更少的代码行中是否可以实现相同的结果。
我试图自己搞清楚,所以我做了一个快速的程序,以确保我确切地知道我想要放置什么和在哪里。输出如下:
Address of {type: int} &a = 0031FEF4; a = 1
Address of {type: int[2]} &b = 0031FEE4; b = 0031FEE4
Address of {type: int[2]} &b[0] = 0031FEE4; b[0] = 2
Address of {type: int[2]} &b[1] = 0031FEE8; b[1] = 3
Address of {type: int*} &c = 0031FED8; c = 008428C8
Address of {type: int*} &c[0] = 008428C8; c[0] = 2
Address of {type: int*} &c[2] = 008428D0; c[2] = 1
有一次我确定我知道在哪里尝试了一些东西。想到的第一个想法是将第二个元素的地址放到指针的分配中,然后用它替换数组的内存地址(参见下面的代码)。我尝试的所有内容最终都失败了,通常会出现语法错误。
这就是我的尝试。我真的希望这个能够发挥作用,因为它是最简单的解决方案。
b = &c[1];
这显然不起作用。
编辑:解决方案: 不要这样做! 如果必要创建指向数组的指针然后指向数组;对于我可以理解的任何目的,这都是毫无意义的。 有关更多详细信息,请参阅以下rodrigo的答案。
答案 0 :(得分:25)
首先,b
是一个数组,而不是一个指针,所以它不可分配。
此外,您无法将任何内容转换为数组类型。但是,您可以转换为指向数组的指针。 请注意,在C和C ++中,指向数组的指针并不常见。使用普通指针或指向指针并避免指向数组的指针几乎总是更好。
无论如何,你要求的可以或多或少地完成:
int (*c)[2] = (int(*)[2])new int[2];
但是typedef
会让它变得更容易:
typedef int ai[2];
ai *c = (ai*)new int[2];
为安全起见,删除应使用原始类型完成:
delete [](int*)c;
如果你只是为了好玩而这样做会很好。对于现实生活,通常最好使用std::vector
。
答案 1 :(得分:0)
首先强制转换为C样式数组的指针,这通常是非常糟糕的做法。
但是您可以将临时数组(“右值数组” )衰减到地址/指针。 就是这样写
created |updated |
-------------------|-------------------|
2018-11-12 16:00:22|2018-11-12 16:00:22|
尽管我再次强调:这样做时,您应该有充分的理由进行此类技巧。
上面列出的P.S。代码仅对C99 / C11有效,对现代C ++编译器无效。
答案 2 :(得分:-1)
通过指针索引数组:
int* arr;
int x = arr[2]; // Pointers can be subscripted
请注意,这不是强制转换,但通常情况下,这是执行您真正需要的最简单方法。