C++ 反向c++;大堆

C++ 反向c++;大堆,c++,C++,我的目标是将数组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;

我的目标是将数组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;
}
#包括
使用名称空间std;
内部版本(内部arr[],内部a){
//INTR;
对于(int i=a-1;i>=0;i--){

cout如果允许您使用STL中的reverse(),则该问题的最佳答案是:

std::reverse 

intmain()
{
int arr[]={6,41,12,5,2};
不能使用
sizeof(arr)/sizeof(arr[0])
而不是
sizeof(arr)


sizeof(arr)
给出数组的总大小。
sizeof(arr[0])
是一个数组元素的大小(所有元素的大小都相同)。因此
sizeof(arr)/sizeof(arr[0])
是元素的数量。

sizeof返回以字节为单位的大小。在您的示例中,如果sizeof(int)=4,返回20。

因为您使用的是数组,所以还必须保持数组的大小。
sizeof
计算内存中某个值的大小,在这种情况下,表示
arr
的所有内存的大小。您可以执行
sizeof(arr)/sizeof(int)
获取数组中的元素数。这是有意义的,因为它取数组的总大小并除以数组中元素的大小。但是,请注意,这仅适用于数组(
int arr[4]={6,41,12,5,2};
)。如果它是通过
int*i=new int[4];
之类的方式指向堆分配数组的指针,则需要保持数组的大小


另外,你是在
cout中调用你的reverse函数,如果我可以主观地、离题地谈论你的方法,这是非常不象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));
void反向(int*a,int-n)
{
int*p=a,*q=a+n-1;
而(p

当然,由于您的问题被标记为
c++
,因此总是有
std::reverse()
Sizeof操作符返回一个额外的(arrayLength+1)这里6将在passs 6时返回,它存储在a-1中,当a-1得到5时,但数组索引从0开始长度-1,从0到4,这里我指向索引5,它不是最后一个元素last+1,这就是为什么得到垃圾值
返回的是int指针的大小,而不是数组中的元素数。@SamDufel-在本例中,
sizeof(arr)
(因为
arr
在使用
sizeof
时是上下文中的一个数组)将产生
5*sizeof(int)
sizeof(arr)
返回数组的大小(以字节为单位),即
sizeof(int)*5
。它不返回数组中的元素数。为此,您需要说
sizeof(arr)/sizeof(arr[0])
我猜这是一个家庭作业问题,所以STL是不可能的。但是,是的,通常情况下,
std::reverse
是答案。也许他关心。不是说
reverse
不是最好的解决方案,但是“谁关心?”部分很容易被排除在这个答案之外。
sizeof(arr)/sizeof(arr[0])
是一个更通用的版本。我倾向于更喜欢通用性。但两者都适用于将数组传递给函数。是的,我同意这种sizeof(arr)/sizeof(arr[0])代码更好
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));