c ++中的别名变量数组

时间:2017-06-19 13:12:47

标签: c++ arrays pointers vector reference

我想创建一个包含另一个数组变量的数组,并且应该将变量复制为别名(即不是值)。

例如

int* x;
int* y;
int* z[4];   // What should I do if length of z is not known initially.
x =new int[2];
y= new int[2];
x[0]=1;
x[1] =2;
y[0]=3;
y[1]=4;
z[0] =&x[0];
z[1] = &x[1];
z[2] =&y[0];
z[3] =&y[1];

此处,数组zxy的引用组成。 “z”中的更改将在xy中显示,反之亦然。

我需要什么:
2)z现在是整数指针数组。如何将其转换为整数数组?

3)由于指针很难管理,我如何使用向量获得相同的功能。据我所知,矢量不能存储引用。

2 个答案:

答案 0 :(得分:1)

数组的概念是内存是顺序的。这意味着每个元素都在另一个元素之后。(例如arr[0]是第一个元素的地址,这与*arr相同。如果你需要第二个元素,你将输入arr[1]这是(*arr)+1)。 如果要创建包含两个其他数组元素的数组,则必须创建第三个数组并复制值(z[0] = a[0]; ...) 对于动态分配,您可以使用具有接受整数值的构造函数的vector。 std::vector<int> z = std::vector<int>(a.size() + b.size())

这是在不存储指针的情况下执行此操作的唯一方法。 请注意,如果您将容器a中的某些内容复制到容器b,然后在容器中更改它,则容器b中的内容不会更改。

答案 1 :(得分:0)

取代此代码段

 int *z;
 z = new int[N];     //N is integer.
 z = &x[0];

你应该写

 int **z;
 z = new int * [N];     //N is integer.
 z[0] = &x[0];

或者您可以使用类模板std::vector<int *>而不是数组。