C语言这样写为什么会出警告啊,求大神指教,谢谢!

#include <stdio.h>
#define COLS 4

int sum2d(const int ar[][COLS], int rows);
int sum(const int ar[], int n);

int main(void)
{
int total1, total2, total3;
int *pt1;
int (*pt2)[COLS];

pt1 = (int[2]){ 10, 20 };
pt2 = (int[2][COLS]){ { 1, 2, 3, -9}, { 4, 5, 6, -8} };
total1 = sum(pt1, 2);
total2 = sum2d(pt2, 2);
total3 = sum((int[]){ 4, 4, 4, 5, 5, 5 }, 6);
printf("total1 = %d\n", total1);
printf("total2 = %d\n", total2);
printf("total3 = %d\n", total3);

return 0;
}

int sum(const int ar[], int n)
{
int i;
int total = 0;

for (i = 0; i < n; i++)
total += ar[i];

return total;
}

int sum2d(const int ar[][COLS], int rows)
{
int r;
int c;
int total = 0;

for (r = 0; r < rows; r++)
for (c = 0; c < COLS; c++)
total += ar[r][c];

return total;
}

警告提示:
Noname1.c: In function 'main':
Noname1.c:16:2: warning: passing argument 1 of 'sum2d' from incompatible pointer type [enabled by default]
Noname1.c:4:6: note: expected 'const int (*)[4]' but argument is of type 'int (*)[4]'

你的参数需要的是const int (*)[4],你传递的是int (*)[4],这个是没问题的,程序会自动转换参数类型。把函数参数声明为const类型可以防止函数修改传递进来的指针变量的值。追问

不是可以这样写么,那为什么还会警告啊!

追答

这样写是正确的啊,不要在意这些细节@。@

追问

总应该有原因吧,不知道为什么我难受死了!

追答

原因就是上面写的啊,参数类型不对。
要不你就声明一个const类型的参数,
const int (*conpt2)[COLS] = pt2;

然后把conpt2传递到函数试试。

温馨提示:内容为网友见解,仅供参考
无其他回答

求助一个C语言问题 为什么在VC中老是提示我 warning C4101: 'c...
原因是局部变量的错误使用。你的 f,c,k都是在main()函数里面定义的,然而,你在使用这些变量时是在temp()函数里面,在某个函数里面定义的变量只能在此函数中使用,所以你会产生错误。解决办法为,将这些变量定义为全局变量。问题成功解决。

一段C语言代码不知道错哪儿了,请高手指教
一、语法错误 所谓“语法错误”是指由于违反了语言有关语句形式或使用规则而产生的错误。比如错误地使用了关键字、遗漏了某些必需的标点符号、分支语句或循环语句不完整或不匹配等都会导致语法错误。对于语法错误,在 VB 中可以通过设置“自动语法检测”功能来发现。设置“自动语法检测”功能的方法是执行菜单...

最近在自学C语言,用的VS2019,为什么照抄结果还报错?请指教。。。
这是提示你scanf这个函数不安全,让你换成scanf_s,你有两种选择,换函数或者是取消安全警告

为什么我的C语言软件编程后调试的时候老是会有提示执行cl.exe错误啊...
很明白的啊,你的程序ss.cpp第六行中变量x没有定义,所以错了。你改一下就可以了。

...问题求大神指教:哪里错了,如何改正,为什么会出现这种情况?
scanf的格式加'\\n',含义特殊,不是输入一个回车,而是输入完一个数字后,必须等待一个非空格、制表符、回车的输入,程序才会继续。所以你那样写,第一次循环输入2回车,不会进入下一次循环,而是等待再次输入,然后你输入3的时候2被存储在元素1中,进入下一个循环,已经有3了还要等待输入,于是你输入...

为什么老是提示:未声明的标识符a,b,望c语言大神指教
y);void main(){int a,b,y;printf("输入两个整数:");scanf("%d%d",&a,&b);printf("输入计算结果:");scanf("%d",&y);Print(Add(a,b),y);}int Add(int a,int b){ int c;c=a+b;return c;}void Print(int x, int y){if (y!=x)printf("not correct!Try again!"...

请帮我看下C语言float那行出现错误 求指教
错误在这行 define f(x) (2*x*x*x-4*x*x=3*x-5)我不知道你的目的,但是 '='不应该在括号内,#define 等同巨集,if(f(c)==0)会变成 if((2*x*x*x-4*x*x=3*x-5)==0)不符文法 你应该先化简 f(x) (2*x*x*x-4*x*x-3*x+5)就可以了 ...

c语言编程。求大佬指教。。 这个哪里错了。应该怎么改? 为什么一直说f...
提示的错误是函数没有定义,在你的main()函数里面用到了fork()函数,但是你并没有定义它,所以编译器就不知道这个fork是个什么东西。你可以在下面定义一下这个函数。

求高手指教C语言error C2143: syntax error : missing ';' befor...
include <stdio.h>int main(void){ double delta=3;\/\/楼主漏了一个分号,在表达式后边都需要一个分号 if (delta>0) printf("有两个解!\\n"); else if (delta==0) printf("有一个唯一解!\\n"); else printf("无解!\\n"); return 0;} ...

C语言,这个代码运行不出想要的东西求大神指教!
scanf(“%d“,&Num[i])是给数组输入整形数据 而$是字符 你这样写明显错了 建议用getchar

相似回答