代码之家  ›  专栏  ›  技术社区  ›  NOOBAF

将数组传递给函数(C)

  •  1
  • NOOBAF  · 技术社区  · 6 年前

    我编写了一个函数来旋转数组, 我已经检查过了,当代码在一个块中时,它就可以工作了,即所有 是在main()下编码的,但是当我分割代码以便在不同的函数下进行旋转时,我无法使其工作(它会截断而不是旋转)。 我很确定这与数组指针有关。

    抱歉,完全没有

    请帮助:

    #include<stdio.h>
    void rotate(int *arr,int length);
    int main()
     {
     // this code creates an array via input
     int length;
     int i;
     int num;
        printf("enter length of array\n");
        scanf("%d",&length);
     int arr[length];
     for (i=0;i<length;i++) {
        printf("enter number\n");
        scanf("%d",&num);
        arr[i]=num;
     }
         // just prints original
        for(i=0;i<length;i++){
        printf("original arr[%d]=%d\n",i,arr[i]);
    
        }
    
    
     //runs rotate function
    
     rotate(arr,length);
    
     return 0;
     }
    
    //the rotate function inputs rotation amount and uses nested for loop to 
    execute
    void rotate(int *arr,int length)
    {
    int n;
     printf("by how many do you want to rotate array?");
        scanf("%d",&n);
        int i;
        int j;
        int temp;
        for (j=0;j<n;j++)
        {
                temp=arr[0];
            for (i=0;i<length-1;i++)
            {
    
                arr[i]=arr[i+1]; 
    
            }
        arr[length-1]=temp;
                printf("rotated arr[%d] = %d\n",i,arr[i]);
        }
    
    
        }
    

    我的输出如下所示:

    enter length of array
    5
    enter number
    1
    enter number
    2
    enter number
    3
    enter number
    4
    enter number
    5
    original arr[0]=1
    original arr[1]=2
    original arr[2]=3
    original arr[3]=4
    original arr[4]=5
    by how many do you want to rotate array?
    3
    rotated arr[4] = 1
    rotated arr[4] = 2
    rotated arr[4] = 3
    
    RUN FINISHED; exit value 0; real time: 9s; user: 0ms; system: 0ms
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   Faizaan Khan    6 年前

    在C中,您需要在“main”函数之前声明函数,或者在main函数之上同时声明和定义函数。也请分享您的错误消息,以获取帮助。

    此外,在C语言中,您不能真正创建这样的动态数组(即,如果在运行时给定整数的值,则取一个整数值,然后使用它定义数组的大小“int array[integer]”是错误的)

    阅读 http://www.mathcs.emory.edu/~cheung/Courses/255/Syllabus/2-C-adv-data/dyn-array.html ,或任何其他有关C中动态数组以及如何使用malloc和calloc的教程。

        2
  •  0
  •   Akshay Aggarwal    6 年前

    据我所知,问题在于循环内的rotate方法中的最后一个print语句。

    必须再次遍历整个数组才能打印旋转的数组。 这样地。

    void rotate(int *arr,int length)
    {
    int n;
     printf("by how many do you want to rotate array?");
     scanf("%d",&n);
     int i;
     int j;
     int temp;
    for (j=0;j<n;j++)
    {
            temp=arr[0];
        for (i=0;i<length-1;i++)
        {
    
            arr[i]=arr[i+1]; 
    
        }
    arr[length-1]=temp;
    
    }
    
    for(i=0;i<length;i++){
    
      printf("original arr[%d]=%d\n",i,arr[i]);
    
      }
    
    }
    

    而且,始终在c中的顶部定义函数。