指针数组C ++创建的副本

时间:2017-11-10 16:45:50

标签: c++

我想创建一个指针数组,每个指针应该保留另一个数组中所有元素的内存地址。但有些事情是错误的。

以下是代码:

int main()
{
    int a[] = { 1, 2, 3, 4, 5 };
    int *b = new int[sizeof(a)];

    for (int i = 0; i < sizeof(a); i++)
    {
        b = &a[i];
    }

    std::cout << &b[3] << std::endl;
    std::cout << &a[3] << std::endl;

    return 0;
}

当我期望是类似的内存地址和值。一切都不一样。

2 个答案:

答案 0 :(得分:0)

sizeof(a)返回a IN BYTES 大小。

要获得元素的数量,您应该将其除以sizeof(int)

因此,如果您有5个元素,那么sizeof(a)等于5*sizeof(int)。除以sizeof(int)(可能会因您正在使用的机器而异),您将拥有确切的元素数量。

我想要分配b[i] = &a[i],以便将地址存储在b的不同元素中。

答案 1 :(得分:0)

我想你想这样做

int main(int argc, char *argv[])
{

    int a[] = { 1, 2, 3, 4, 5 };
    unsigned max=sizeof(a) / sizeof(a[0]);
    int **b = new int*[max];

    for (int i = 0; i < max; i++)
    {
        b[i] = &a[i];
    }

    unsigned max=sizeof(a) / sizeof(a[0]);
    for (int i = 0; i < max; i++)
    {
         std::cout << "b[" << i << "]:" << *b[i] << std::endl;
         std::cout << "a[" << i << "]:" << a[i] << std::endl;
    }
    delete[] b;

    return 0;
} 

两个错误。首先,当您声明指针数组时,使用

int **b;

其次,要确定数组的大小,可以使用

sizeof(a) / sizeof(a[0])

但请注意。将数组作为参数传递给函数后,它将不再工作。