c - 编写一个程序来交换数组中的值

标签 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 值。任何帮助将不胜感激!

编辑

抱歉,有人告诉我不要担心这些警告 - 听起来违反直觉。警告是:

[在函数中]

赋值使指针来自整数而不进行强制转换

初始化从指针生成整数,无需强制转换

主要

传递交换参数[数字]使指针来自整数而不进行强制转换

最佳答案

您的代码存在几个问题。

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

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

对于您要交换的所有其他对也类似。

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

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");

关于c - 编写一个程序来交换数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47146186/

相关文章:

javascript - 如何迭代对象数组并连接内容

c# - C#创建派生类时,是否可以用n参数函数覆盖0参数虚函数?

有人可以告诉我我的代码有什么问题并尝试解释它吗?

c++ - 如果没有带有 LANGUAGE CXX 的 set_source_files_properties,CMake 将无法构建

c - Windows 在 Visual Studio 中触发了断点错误

c++ - 数组访问的返回类型

c++ - 使用分段寻址模式的 16 位系统上 `size_t` 、 `uintptr_t` 、 `intptr_t` 和 `ptrdiff_t` 类型的实际大小是多少?

c++ - 如何给所有结构成员赋值

C 函数调用 : Understanding the "implicit int" rule

android - 从另一个文件调用 gradle resValue 会导致 "Error:Gradle DSL method not found: ' resValue( )'"