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

为何传递二维数组参数时程序报‘incompatible integer to pointer conversion’错误?

问题分析与解决

错误原因

你遇到的类型不匹配警告,核心问题是函数调用时传递的参数类型完全错误:

  • 函数arrayCounter的参数声明为int arr[40][50],但在C语言中,二维数组作为函数参数会被隐式转换为指向一维数组的指针,也就是int (*)[50]类型(必须保留第二维的大小信息)。
  • 你在main的嵌套循环里调用arrayCounter(array[i][j]),这里的array[i][j]是二维数组中的单个int元素,把整数传给需要数组指针的参数,自然会触发类型不兼容的警告。
  • 你尝试加&变成&array[i][j],这得到的是int*(单个整数的指针),依然和int (*)[50]类型不匹配,所以无法解决问题。

另外,你的逻辑也有问题:不需要在填充数组的每个元素时都调用统计函数,应该等整个数组填充完成后,一次性统计所有符合条件的元素。

修正后的代码

#include<stdio.h>

int arrayCounter(int arr[40][50]) {
    int counter = 0; 
    for (int i = 0; i < 40 ; i ++) {
        for (int j = 0 ; j < 50 ; j ++) {
            if(arr[i][j] % 6 == 0 && arr[i][j] % 5 != 0 ) {
                counter ++;
            }
        }
    }
    return counter;
}

int main() {
    int array[40][50];
    // 先填充整个数组
    for (int i = 0; i < 40; i++) {
        for(int j = 0; j < 50; j++) {
            array[i][j] = (i+1) * (j+1);
        }
    }
    // 数组填充完成后,调用统计函数并打印结果
    printf("%d\n", arrayCounter(array));
    return 0;
}

关于数组参数退化为指针的解释

你提到的“明明函数定义的是数组参数,却提示指针类型”是C语言的核心特性:
当数组(不管一维还是二维)作为函数参数时,编译器会自动将其调整为指向数组第一个元素的指针。对于二维数组int arr[40][50],它的第一个元素是一个包含50个int的一维数组,所以对应的指针类型就是int (*)[50]——这就是编译器警告里提到的参数类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:07:39