【发布时间】:2019-12-13 21:33:51
【问题描述】:
您好,我是 C++ 的初学者。 这一次,我尝试使用动态分配运算符来反转 Array 的元素顺序。 例如数组{1,2,3,4}将通过调用函数'reverseArray'重新排列{4,3,2,1}。 一切正常,但不知何故我得到了不需要的整数“-1”以及重新排列的数组。 例如 {-1,4,3,2,1}。 这意味着我做错了,我真的想知道我的错。 这是我的代码,请帮我弄清楚。
#include<iostream>
#include<new>
using namespace std;
void reverseArray(int [] , int);
int main(){
int num=0;
cout << "enter size of pointer : " ;
cin >> num ;
int *pointerArray = new int [num];
cout << "enter integer numbers in pointer" << endl;
for(int index = 0 ; index < num ; index++){
cin >> pointerArray[index];
}
reverseArray(pointerArray, num);
delete[] pointerArray;
return 0 ;
}
void reverseArray(int reverse[], int Size){
int*ptArray[Size];
cout << "the reverse order of entered numbers is : " << endl;
for(int index = 0 ; Size >= 0 ; index++) {
ptArray[index] = &reverse[Size];
cout << *ptArray[index] << " " ;
--Size;
}
return ;
}
【问题讨论】:
-
int*ptArray[Size];使用 VLA 扩展,因此不是有效的 C++。 -
您以
Size = size of the array开始循环并循环到Size == 0(包括),这使得size of array +1总迭代次数。 -
使用 0 索引,您必须从 0 迭代到 n-1(包括),而对于反向遍历,从 n-1 到 0
-
不要误以为 c-arrays 是为初学者准备的,
std::vector是高级的,恰恰相反。也使用new对初学者不太友好 -
@parktomatomi 可能是这样,但这不会阻止我建议
std::vector,因为人们经常被“记忆是如何工作的”而没有被告知在任何其他情况下你会选择不同的解决方案
标签: c++ arrays reverse dynamic-memory-allocation