编写一个在数组中交换值的程序

时间:2017-11-06 21:32:54

标签: c arrays function pointers swap

这是作业

这是我的程序

#include <stdio.h>
void swap (int *a  , int *b  , int *c  ,  int *d  ,  int *e ) {
    int temp1 = a;
    a = b;
    b = temp1;

    int temp2 = b;
    c = d;
    d = temp2;

    int temp3 = e
    e = a;
    a = temp3;
}

void swap (int *a  , int *b  , int *c  , int *d  , int *e );
int main(void)
{
    int arr[15] = {0};
    int i;
    int a = arr[0], b = arr[7], c = arr[8], d = arr[3], e = arr[14];

    printf("Enter 15 integers\n");
    for(i = 0; i < 15; ++i) {
        scanf("%d" , &arr[i]);
        //printf("The ints are %d " , arr[i]); checked if all the ints were recorded
    }
    swap(a, b, c, d, e);
    printf("Swapped array:\n %d" , arr[i]);

    return 0;
 }

所以该程序要求我让用户输入15个整数。该函数必须将输入的第一个整数(arr [0])与输入的第七个整数(arr [7])进行交换。然后将第8个与第3个交换,然后将第一个与第一个交换。我的程序符合但提供了一些警告,当我尝试打印我的交换数组时,我得到的值是0.任何帮助将不胜感激!

修改

抱歉,我听到某人不担心警告 - 反直觉听。警告是:

[在功能中]

赋值从整数中生成没有强制转换的指针

初始化从指针生成整数而没有强制转换

主要

传递swap的参数[numbers]使得指针来自整数而没有强制转换

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题。

首先,swap功能不起作用。您正在交换函数内部作为局部变量的指针的值,您不会交换它们指向的数组元素。你需要间接通过指针来获取值。

int temp1 = *a;
*a = *b;
*b = temp1;

与你交换的所有其他对类似。

其次,swap期望指针作为参数,但您从int传递main()个变量。您需要使用指针变量,您将其设置为数组元素的地址:

int *a = &arr[0], *b = &arr[7], *c = &arr[8], *d = &arr[3], *e = &arr[14];

您可以考虑更改swap()函数,因此只需要两个指针,并将其调用3次以完成所有3次交换。

最后,要打印数组,需要在循环中打印元素:

printf("Swapped array: ");
for (i = 0; i < 15; i++) {
    printf("%d ", arr[i]);
}
printf("\n");