C++ 如何在c+;中移动数组中的每个元素+;只使用指针向右移动一个?

C++ 如何在c+;中移动数组中的每个元素+;只使用指针向右移动一个?,c++,arrays,C++,Arrays,例如,[1,2,3,4,5]将变成[5,1,2,3,4] 我不能使用额外的数组,只能使用索引遍历。我也可以使用int来存储值,但这似乎没有帮助 这是我的尝试,但没有成功: void shiftonetoright(int arr[], int n){ int *ptr1 = arr; int s1; while(n>0) { ptr1++; s1 =*ptr1; *ptr1 =s1; n-

例如,[1,2,3,4,5]将变成[5,1,2,3,4]

我不能使用额外的数组,只能使用索引遍历。我也可以使用int来存储值,但这似乎没有帮助

这是我的尝试,但没有成功:

void shiftonetoright(int arr[], int n){

    int *ptr1 = arr;
    int s1;

    while(n>0)
    {
        ptr1++;
        s1 =*ptr1;
        *ptr1 =s1;

        n--;
    }
}

您必须将最后一个元素旋转回起始位置,并简单地移动其他元素,因此更像(假设
n
arr
中的元素数):


您必须将最后一个元素旋转回起始位置,并简单地移动其他元素,因此更像(假设
n
arr
中的元素数):


您必须将最后一个元素旋转回起始位置,并简单地移动其他元素,因此更像(假设
n
arr
中的元素数):


您必须将最后一个元素旋转回起始位置,并简单地移动其他元素,因此更像(假设
n
arr
中的元素数):

void shiftonetoright(int-arr[],int-n)
{
int*ptr1=arr;
int s1=ptr1[0];
int s2;
对于(int i=1;i
void shiftonetoright(int arr[],int n)
{
int*ptr1=arr;
int s1=ptr1[0];
int s2;
对于(int i=1;i
void shiftonetoright(int arr[],int n)
{
int*ptr1=arr;
int s1=ptr1[0];
int s2;
对于(int i=1;i
void shiftonetoright(int arr[],int n)
{
int*ptr1=arr;
int s1=ptr1[0];
int s2;
对于(int i=1;i
使用
std::rotate(arr,arr+1,arr+n)
。这与您之前的问题(有公认的答案)有显著不同吗?顺便说一下,
s1=*ptr1*ptr1=s1在您的代码中没有多大意义。。。这确实是一条路要走。此外,你可能会发现肖恩·帕雷特的演讲在这个话题上提供了特别的信息;)@Kerrekop说他必须使用pointer@PaulEvans:很好,
arr
arr+1
arr+n
都是指针。使用
std::rotate(arr,arr+1,arr+n)
。这与您之前的问题(有公认的答案)有显著不同吗?顺便说一下,
s1=*ptr1*ptr1=s1在您的代码中没有多大意义。。。这确实是一条路要走。此外,你可能会发现肖恩·帕雷特的演讲在这个话题上提供了特别的信息;)@Kerrekop说他必须使用pointer@PaulEvans:很好,
arr
arr+1
arr+n
都是指针。使用
std::rotate(arr,arr+1,arr+n)
。这与您之前的问题(有公认的答案)有显著不同吗?顺便说一下,
s1=*ptr1*ptr1=s1在您的代码中没有多大意义。。。这确实是一条路要走。此外,你可能会发现肖恩·帕雷特的演讲在这个话题上提供了特别的信息;)@Kerrekop说他必须使用pointer@PaulEvans:很好,
arr
arr+1
arr+n
都是指针。使用
std::rotate(arr,arr+1,arr+n)
。这与您之前的问题(有公认的答案)有显著不同吗?顺便说一下,
s1=*ptr1*ptr1=s1在您的代码中没有多大意义。。。这确实是一条路要走。此外,你可能会发现肖恩·帕雷特的演讲在这个话题上提供了特别的信息;)@Kerrekop说他必须使用pointer@PaulEvans:很好,
arr
arr+1
arr+n
都是指针。OP是。@blastfurny啊,我不知道……这仍然是个好答案,OP只是有点奇怪。@blastfurny谢谢,但是。。。一个奇怪的C++程序员——下一步是什么?p OP是。@BLASTHERNEAR啊,我不知道……这仍然是个好答案,OP只是有点奇怪。@BLASTHERNEAR谢谢,但是。。。一个奇怪的C++程序员——下一步是什么?p OP是。@BLASTHERNEAR啊,我不知道……这仍然是个好答案,OP只是有点奇怪。@BLASTHERNEAR谢谢,但是。。。一个奇怪的C++程序员——下一步是什么?p OP是。@BLASTHERNEAR啊,我不知道……这仍然是个好答案,OP只是有点奇怪。@BLASTHERNEAR谢谢,但是。。。一个奇怪的C++程序员——下一步是什么?穷人。。。太多相同的An…Ooopss。。。太多相同的An…Ooopss。。。太多相同的An…Ooopss。。。太多相同的答案。。。。
 void shiftonetoright(int arr[], int n) {
    int last = arr[n - 1];
    int* ptr = arr;
    for( int i = n - 1; i > 0; --i) {
         *(ptr + i) = *(ptr + i - 1);
    }
    *ptr = last;
}
void shiftonetoright(int arr[], int n)
{

    int *ptr1 = arr;
    int s1 = ptr1[0];
    int s2;

    for(int i = 1  ; i < n ; ++i)
    {
      s2 = ptr1[i];
      ptr1[i] = s1;
      s1 =  s2;
    }

    ptr1[0] = s1;

}