【发布时间】:2013-11-18 11:16:31
【问题描述】:
如何将 int* 转换或转换为 int[x]?
首先,我知道指针可以被索引。所以我知道我可以遍历指针和数组并手动转换指针。 (例如,带有arr[i] = p[i] 的 for 循环)。我想知道是否可以用更少的代码行来实现相同的结果。
作为示例,我尝试将指针 int* c = new int[x] 转换为数组 int b[2]
int a = 1;
int b[2] = { 2, 3 };
int* c = new int[b[1]];
c[0] = b[0];
c[1] = b[1];
c[2] = a;
我想看看值在哪里,所以我做了一个简单的程序来输出地址和值。输出如下:
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 的答案。
【问题讨论】:
-
首先,你为什么需要它?提示:
int*和int [2]有不同的用途(虽然第二个可以衰减到第一个)。 -
我正在尝试简化文件读取功能。这是我正在努力解决的概念,以便进行所述简化。
-
使用指向数组的指针永远不会变得更简单。只需使用简单的指针和大小。
-
@rodrigo 数组永远不会变得更简单。只需使用
std::vector -
@Caleth 确实!这正是我在下面回答中的结论;-)。