C++ C++;整数数组指针上的程序行为

C++ C++;整数数组指针上的程序行为,c++,for-loop,pointers,C++,For Loop,Pointers,谁能解释一下为什么循环只执行一次 for循环执行一次,永远不会到达程序的末尾 如果你有时间回顾我的错误,那么请指出错误,因为我知道这不是怎么做到的 using namespace std; #include<iostream> int* rotate(int* ar,int d,int n) { int tmp[n]; d = d%n; for (int i = 0; i < n; ++i) { tmp[i] = ar[(i+

谁能解释一下为什么循环只执行一次

for循环执行一次,永远不会到达程序的末尾 如果你有时间回顾我的错误,那么请指出错误,因为我知道这不是怎么做到的

using namespace std;
#include<iostream>

int* rotate(int* ar,int d,int n)
{
    int tmp[n];
    d = d%n;

    for (int i = 0; i < n; ++i)
    {
        tmp[i] = ar[(i+d)%n];
    }
    free(ar);
    return tmp;
}


int main(int argc, char const *argv[])
{
    int arr[] = {1,2,3,4,5};
    int *a;
    int n = sizeof(arr)/sizeof(arr[0]);
    a = rotate(arr,4,n);
    cout<<endl;

    for (int i = 0; i < n; ++i)
    {
         cout<<i<<endl;
         cout<<a[i]<<endl;
    }
    cout<<"End";
    return 0;
}
使用名称空间std;
#包括
整数*旋转(整数*ar、整数d、整数n)
{
int-tmp[n];
d=d%n;
对于(int i=0;i
int* rotate(int* ar,int d,int n)
{
    int tmp[n];                     // 1
    d = d%n;
    for (int i = 0; i < n; ++i)
    {
        tmp[i] = ar[(i+d)%n];
    }
    free(ar);                       // 2
    return tmp;                     // 3
}
这就是使用
std::rotate
执行相同操作的方法:

#include <array>
#include <iostream>
#include <algorithm>

int main(int argc, char const *argv[])
{
    int arr[] = {1,2,3,4,5};
    int n = sizeof(arr)/sizeof(arr[0]);
    std::rotate(std::begin(arr),std::begin(arr)+4,std::end(arr));

    for (int i = 0; i < n; ++i)
    {
         std::cout << i << std::endl;
         std::cout << arr[i] << std::endl;
    }
    std::cout<<"End";
}
#包括
#包括
#包括
int main(int argc,char const*argv[]
{
int arr[]={1,2,3,4,5};
int n=sizeof(arr)/sizeof(arr[0]);
标准::旋转(标准::开始(arr),标准::开始(arr)+4,标准::结束(arr));
对于(int i=0;iStd::Cuff> <代码>(Ar);< /COD>是坏的,因为未通过“代码> MARROCKE”(/Calp>家族)分配的东西。使用<代码> MARROCKE()/<代码>和()(代码)>在C++中不是正确的方式。<代码> FAL(AR);< /代码>未使用<代码> MARROCK()的数组。?为什么要开始做这件事?我想这是一个练习,但是考虑有<代码> STD::vector < /代码> />代码:STD::数组< /COD>和<代码> STD::旋转,它可以在大致2-3中完成同样的操作。lines@idclev463035818是的,我可以用vector来做,但我只是把我的指针知识弄乱了!!
inttmp[n]< /代码> NoooooooThanks解释了所有这些解释……是的,比这更好的代码可以写……但是我的C++知识并不是那么回事!!@ NISH13你不同意使用<代码> STD::旋转< /代码>的代码比手写算法简单得多吗?是的,我完全同意它更简单,更有效。(你建议的代码)。但我只是想在这方面做更多的探索(我写的代码)!!谢谢你像这样与我周旋:)其他人甚至懒得回答
#include <array>
#include <iostream>
#include <algorithm>

int main(int argc, char const *argv[])
{
    int arr[] = {1,2,3,4,5};
    int n = sizeof(arr)/sizeof(arr[0]);
    std::rotate(std::begin(arr),std::begin(arr)+4,std::end(arr));

    for (int i = 0; i < n; ++i)
    {
         std::cout << i << std::endl;
         std::cout << arr[i] << std::endl;
    }
    std::cout<<"End";
}