1

我正在用 C++ 复制一个数组,代码如下:

int arr1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int *source = arr1;
size_t sz = sizeof(arr1) / sizeof(*arr1); // number of elements
int *dest = new int[sz];                // uninitialized elements
while (source != arr1 + sz)
    *dest++ = *source++; //  copy element and increment pointers

int *p = dest;
while (p != dest + sz) {
    cout << *p++ << endl;
}

运行上述代码后,我得到:

714124054
51734
9647968
9639960
0
0
0
0
0
0

有什么问题?

4

2 回答 2

5

dest但是,通过递增您将丢失实际的开头,从而正确复制了数组。

您需要保留一个副本dest以在它之后循环。也不要忘记在分配内存后释放它。

最后,在 C++ 中,您可能希望使用std::vector以透明方式完成所有这些操作,同时牺牲最低性能的数组来代替数组。

int arr1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int *source = arr1;
size_t sz = sizeof(arr1) / sizeof(*arr1); // number of elements
int *dest = new int[sz];                // uninitialized elements
int *d = dest;
while (source != arr1 + sz)
    *d++ = *source++; //  copy element and increment pointers

int *p = dest;
while (p != dest + sz) {
    cout << *p++ << endl;
}

[...]
delete[] dest;
于 2013-09-03T03:12:27.200 回答
0

在 while 循环中,起始指针未与int *dest = new int[sz];,一起保存*dest++,因此输出超出了数组的范围。

修改后的代码:

int arr1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int *source = arr1;
size_t sz = sizeof(arr1) / sizeof(*arr1); // number of elements
int *dest = new int[sz];                // uninitialized elements
int *temp_dest = dest;
while (source != arr1 + sz)
    *temp_dest++ = *source++; //  copy element and increment pointers

int *p = dest;
while (p != dest + sz) {
    cout << *p++ << endl;
}
于 2013-09-03T03:14:25.810 回答