在C中传递数组指针和从不同数组中滑动值

时间:2018-03-24 14:20:08

标签: c arrays function pointers swap

这个应用程序应该使用下面的函数交换数组的前三个数字。当我交换1 2 3 4 5之类的数字时,代码有效,但当我尝试使用此数字5 3 4 9 8 7 2时,它不会显示正确的输出。我真的找不到代码有什么问题。

#include <stdio.h>

int main(void){

    int a_lenth, i,a_content;
    printf("Enter the lenth of the array:");
    scanf("%d", &a_lenth);
    int arr[a_lenth];
    int arr2[a_lenth];

    for(i = 0; i < a_lenth; i++){
            printf("Enter the elements of the array:");
            scanf("%d", &a_content);
            arr[i] = a_content;
            arr2[i] = a_content;
    };

    roll(arr, a_content, arr2);

    return 0;
}

void roll(int *a1, int n, int *a2){
    int e;

    a2[0] = a1[2];
    a2[1] = a1[0];
    a2[2] = a1[1];


    for(e = 0; e < n; e++){
            printf("%d\n", a2[e]);
    }
}

2 个答案:

答案 0 :(得分:1)

根据我的评论:

对函数roll的调用需要第二个参数是int数组的元素数,但是你要发送的是roll(arr, a_lenth, arr2);(我想是一个微不足道的错误)

将其更改为:Enter the lenth of the array:7 Enter the elements of the array:5 Enter the elements of the array:3 Enter the elements of the array:4 Enter the elements of the array:9 Enter the elements of the array:8 Enter the elements of the array:7 Enter the elements of the array:2

输入:(问题中指定的那个)

4
5
3
9
8
7
2

输出:

each_serializer

我希望这会有所帮助

答案 1 :(得分:0)

这可以满足您的需求。正如前面所指出的那样,不正确地调用roll,因为a_content不是输出数组的长度。

int main(void){

    int a_length;
    int a_content;
    printf("Enter the lenth of the array:");
    scanf("%d", &a_length);
    int arr1[a_length];
    int arr2[a_length];

    for(int i = 0; i < a_length; i++){
        printf("Enter the elements of the array:");
        scanf("%d", &a_content);
        arr1[i] = a_content;
        arr2[i] = a_content;
    };

    //void roll(int *a1, int n, int *a2) where n == a_length
    arr2[0] = arr1[2];
    arr2[1] = arr1[0];
    arr2[2] = arr1[1];

    for(int e = 0; e < a_length; e++){
        printf("%d\n", arr2[e]);
    }

return 0;
}