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
相关产品推荐
相关产品推荐

