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

C语言数组元素求和时函数传参出现指针类型不兼容警告求助

解决C语言数组求和时的指针类型不兼容警告

编译器弹出的passing argument 1 of 'myfun' from incompatible pointer type警告,核心原因是传参的指针类型和函数定义的参数类型不匹配:

  • 你定义的myfun函数参数是int*(指向单个int变量的指针)
  • 调用时传入的&a,a是int[10]类型的数组,&a的实际类型是int (*)[10](指向包含10个int元素的数组的指针),两种指针类型不兼容,因此触发警告。

两种修复方案:

方案一:直接传入数组名(推荐)

在C语言中,数组名在大多数场景下会自动转换为指向数组第一个元素的int*指针,完全匹配函数的参数要求。只需要把调用代码改成myfun(a);即可。

修正后的完整代码:

#include<stdio.h>
void myfun(int*);
int main() // 标准C要求main返回int类型
{
    int a[10] = {1,2,3,4,5,6,7,8,9,11};
    printf("Array Elements are : ");
    myfun(a);
    return 0; // 程序正常结束返回0
}
void myfun(int* a)
{
    int i;
    int sum = 0;
    for(i=0;i<10;i++)
    {
        printf("\t%d\t",a[i]);
        sum += a[i]; // 简化写法,等价于sum = sum + a[i]
    }   
    printf("\n\nSum : %d",sum);
}

方案二:修改函数参数为数组指针类型

如果想保留&a的传参方式,需要把函数的参数类型改为数组指针int (*)[10],同时在函数内部访问元素时先解引用数组指针:

#include<stdio.h>
void myfun(int (*)[10]);
int main()
{
    int a[10] = {1,2,3,4,5,6,7,8,9,11};
    printf("Array Elements are : ");
    myfun(&a);
    return 0;
}
void myfun(int (*a)[10])
{
    int i;
    int sum = 0;
    for(i=0;i<10;i++)
    {
        printf("\t%d\t",(*a)[i]); // 先解引用数组指针,再访问对应下标元素
        sum += (*a)[i];
    }   
    printf("\n\nSum : %d",sum);
}

额外注意点:

  • 标准C规范中,main函数的返回类型必须是int,而非void,并且需要返回0表示程序正常执行完毕。
  • 原代码中的换行可以用转义字符\n代替直接换行,让代码格式更规范易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:55:23