Jos*_*h C 22 c++ arrays pointers
如何将int*转换或转换为int [x]?
作为一个例子,我试图将指针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;
Run Code Online (Sandbox Code Playgroud)
首先,我知道我可以遍历指针和数组.因此,将指针转换为具有[]运算符的数组,以索引指针和数组,在迭代时将指针元素分配给数组元素(例如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
Run Code Online (Sandbox Code Playgroud)
一旦我确定我知道我在尝试一些事情的地方.想到的第一个想法是将第二个元素的地址放到指针的分配中,然后用它替换数组的内存地址(参见下面的代码).我尝试的所有内容最终都失败了,通常会出现语法错误.
这是我试过的.我真的希望这个工作,因为它是最简单的解决方案.
b = &c[1];
Run Code Online (Sandbox Code Playgroud)
这显然不起作用.
编辑:解决方案: 不要这样做! 如果有必要创建一个指向数组的指针然后指向该数组; 对于我可以理解的任何目的,这都是毫无意义的.有关更多详细信息,请参阅下面的rodrigo的答案.
rod*_*igo 27
首先b是一个数组,而不是指针,因此它不可分配.
此外,您不能将任何内容转换为数组类型.但是,您可以转换为指向数组的指针.请注意,在C和C++中,指向数组的指针并不常见.使用普通指针或指针指针并避免指向数组的指针几乎总是更好.
无论如何,你要求的可以或多或少地完成:
int (*c)[2] = (int(*)[2])new int[2];
Run Code Online (Sandbox Code Playgroud)
但是一个typedef会让它更容易:
typedef int ai[2];
ai *c = (ai*)new int[2];
Run Code Online (Sandbox Code Playgroud)
为安全起见,删除应使用原始类型完成:
delete [](int*)c;
Run Code Online (Sandbox Code Playgroud)
如果你只是为了好玩,那就太好了.对于现实生活,通常使用起来更好std::vector.
| 归档时间: |
|
| 查看次数: |
45659 次 |
| 最近记录: |