我的目标是将阵列3,12,2,1反转为1,2,12,3。当我运行此代码时,我在实际结果之前得到了垃圾。我似乎无法看到问题在哪里请帮助
#include<iostream>
using namespace std;
int rev (int arr[], int a){
//int r;
for(int i =a-1; i>=0; i--){
cout<<arr[i]<<" ";
}
return 0;
}
int main(){
int arr[] = {6,41,12,5,2};
cout<<"The rev of {6,41,12,5,2}"<<endl;
cout<<rev(arr, sizeof(arr))<<endl;
system("pause");
return 0;
}
答案 0 :(得分:3)
问题的优化答案是使用STL的reverse()如果你被允许使用它:
std::reverse
http://www.sgi.com/tech/stl/reverse.html
int main()
{
int arr[] = {6,41,12,5,2};
cout<<"The rev of {6,41,12,5,2}"<<endl;
reverse(arr, arr + 5);
copy(arr, arr + 5, ostream_iterator<int>(cout, ", "));
}
答案 1 :(得分:3)
使用sizeof(arr)/sizeof(arr[0])
代替sizeof(arr)
。
sizeof(arr)
给出了数组的总大小。 sizeof(arr[0])
是一个数组元素的大小(所有元素都具有相同的大小)。所以sizeof(arr)/sizeof(arr[0])
是元素的数量。
答案 2 :(得分:1)
sizeof以字节为单位返回大小。在您的示例中,如果sizeof(int)= 4,则返回20.
答案 3 :(得分:0)
因为您正在使用数组,所以您还必须保持数组的大小。 sizeof
计算内存中值的大小,在本例中是用于表示arr
的所有内存的大小。您可以执行sizeof(arr)/sizeof(int)
以获取数组中的元素数量。这是有道理的,因为它取数组的总大小并将其除以数组中元素的大小。但请注意,这仅适用于数组(int arr[4] = {6,41,12,5,2};
)。如果它是通过诸如int* i = new int[4];
之类的堆分配数组的指针,则需要保持数组的大小不变。
此外,您正在cout<<
调用中调用反向函数,该调用将打印函数的返回值(在这种情况下,它将硬编码为0)。
事实证明,C ++标准库(std::reverse)中有一个函数可以做到这一点。
答案 4 :(得分:0)
如果我可以主观并且以偏离主题的方式谈论你的方法,那就非常不像C一样。我个人最喜欢的反转数组的方法是这样的:
void reverse(int *a, int n)
{
int *p = a, *q = a + n - 1;
while (p < q)
{
int swap = *p;
*p++ = *q;
*q-- = swap;
}
}
// Usage:
int a [] = { /* ... */ };
reverse(a, sizeof(a)/sizeof(*a));
当然,由于您的问题被标记为c++
,因此总是std::reverse()
。
答案 5 :(得分:0)
sizeof运算符返回一个额外的(arrayLength + 1)这里6将返回当它传递6时它存储在a-1中你得到5但是数组索引从0开始 - 1从0到4这里我指向索引5不是最后一个元素的最后+ 1,表示你有垃圾值的原因