扩展数组的输出返回意外答案

时间:2015-10-26 02:15:53

标签: c++

我已经完成了一个程序,包括使用教授提出的指针要求来反转,扩展和移动数组。所有内容都会编译,但扩展函数的答案不会返回我想要的内容:在旧用户输入数组之后添加0,这会询问数组的大小以及要放入数组的数字。我认为我的问题可能在于我在程序中包含一个可能没有引用的东西的指针。以下是我的代码:

// *numPtr refers to my old user input array and int tamaño is the size of the array


void expandArray(int *numPtr, int tamaño) {

    int *nuevoArray = new int[tamaño *2];

    for (int i = 0; i<tamaño; i++) {
        nuevoArray[i] = numPtr[i];
    }
    for (int i = tamaño; i < (tamaño*2); i++) {
        nuevoArray[i] = 0;
    }
    std::cout << nuevoArray << " ";
}

正如我所说,我的代码理论没有编译我希望的方式是因为我使用* nuevoArray并且它在我的主代码中没有引用,但是再一次,我只是一个C ++的初学者。我在考虑做一个向量,但我想我不会遵循教授提出的指针要求。

3 个答案:

答案 0 :(得分:1)

如果你想打印nuevoarray的内容,只需使用这样的for循环:

for (int i = 0; i < (tamaño*2); i++) {
  std::cout << nuevoArray[i] << " ";
}
std::cout << "\n";

此外,由于您使用new[]创建数组,因此您不应忘记delete[]它!

答案 1 :(得分:0)

您可以使用

打印数组
for (int i = 0 ; i < tamano * 2 ; ++i) {
 std::cout << nuevoArray[i] << " ";
}
std::cout << std::endl;

或在c ++ 11中

for (auto i : nuevoArray) {
     std::cout << i << " ";
    }
    std::cout << std::endl;

PS:std :: endl将返回到新行的开头并刷新cout缓冲区。

答案 2 :(得分:0)

您的代码确实正在分配一个更大的数组,并正确地将数据从numPtr复制到新数组中,并正确地用零填充新数组的其余部分。

您没有明确说明您希望此功能输出的内容,但我猜您希望它打印出新阵列的内容,并且您认为存在问题,因为而不是那样,你会看到它打印出类似&#34; 0x7fb46be05d10&#34;。

您没有正确打印出阵列。相反,你要打印第一个元素的内存地址。如果你想看到内容,那么你需要遍历数组的元素并单独打印出来。

这是一个显示一种方法的功能:

#include <algorithm>
#include <iterator>

void printArray(int *arr, int n) {
  std::copy(arr, arr + n, std::ostream_iterator<int>(std::cout, " "));
}

现在,您可以使用std::cout << nuevoArray << " ";

替换现有代码中的行printArray(nuevoArray, tamaño*2);

(听起来无论是谁教你C ++都应该看看最近的C ++大会上的演讲,CppCon 2015:Stop Teaching C