You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言传引用交换数组元素遇指针不兼容警告的高效解决方法

解决指针类型不兼容警告的方案

问题根源

你调用swap时传了&a,但&a的类型是指向长度为5的int数组的指针(int (*)[5]),而swap函数第一个参数要求的是指向int的指针(int*),类型不匹配才触发了警告。其实数组名a在函数传参时会自动隐式转换为指向数组第一个元素的int*,完全符合函数要求。

高效解决方法

最直接且安全的修改是把调用语句里的&a改成a:

#include <stdio.h>
void swap(int *arr, int i, int j)
{
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}
int main(void)
{
    int a[5] = {2, 4, 6, 2, 3};
    swap(a, 1, 2); // 这里把&a改成a
    for (int i = 0; i < 5; i++)
    {
        printf("%d", a[i]);
    }

    return 0;
}

额外说明

如果非要用取地址的写法(完全没必要,不推荐),可以通过强制类型转换让编译器认可,但这属于画蛇添足:

swap((int*)&a, 1, 2);

但第一种方法才是C语言中传递数组的标准写法,既简洁又符合语言规范,完全能解决警告问题,同时保留你的交换逻辑。

内容的提问来源于stack exchange,提问作者Zethyst

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:22:40