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

C语言参数类型不匹配报错求助:int*与数组指针类型冲突

解决C语言参数类型不匹配报错:expected ‘int ’ but argument is of type ‘int ()[n]’

嘿,这个报错我之前帮好几个开发者排查过,咱们一步步拆解问题~

先搞懂报错的核心意思

编译器的提示已经说得很直白了:你的函数期望接收一个 int * 类型的参数(也就是指向单个整数的指针),但你实际传递的是 int (*)[(long unsigned int)(n)] 类型——翻译成人话就是一个指向长度为n的int数组的指针,两种类型完全不匹配,所以编译器直接亮红灯了。

为什么会踩这个坑?

结合你说的功能(处理数组元素,计算(x+6)%10),大概率是你犯了这个新手常见错误:
你定义了一个变长数组(比如 int a1[n];),调用函数的时候传了 &a1,但其实数组名 a1 本身就会自动“退化”成指向数组第一个元素的指针,类型正好是函数需要的 int*,根本不需要加 & 取地址。

举个简单的例子:&a1 取的是整个数组的地址,它的类型是指向数组的指针,和指向单个int的指针完全不是一回事,编译器自然不认。

直接能用的解决方案

我给你写了一段符合你需求的示例代码,重点看函数定义和调用的地方:

#include <stdio.h>

// 函数接收int*类型的数组指针,以及数组长度
void transform_numbers(int *arr, int length) {
    for (int i = 0; i < length; i++) {
        // 执行你需要的计算:加6后对10取模
        arr[i] = (arr[i] + 6) % 10;
        printf("%d ", arr[i]);
    }
}

int main() {
    int n;
    printf("请输入数组长度:");
    scanf("%d", &n);
    
    int a1[n]; // 定义变长数组
    printf("请输入%d个数字:", n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &a1[i]);
    }
    
    // 重点:直接传数组名a1,不要加&!
    transform_numbers(a1, n);
    
    return 0;
}

额外提醒

如果你的函数是要处理二维数组,那参数类型确实会变成指向数组的指针,但你的需求是处理一维数组的元素,所以完全不需要用到这种类型。记住:一维数组传递的时候,直接用数组名就行,它会自动转换成int*类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:59:07