#include<stdio.h>
Funtions prototypes
int functiondouble(int b);
void notreturnanything(int a, int b);
void byreference(int *b);
void receivevector(int v[]);
void recievematrix(int m[][1]);
int main() {
int c;
printf("%d\n",functiondouble(5));
notreturnanything(3,9);
c = 0;
byreference(&c);
printf("%d\n",c);
int a[10], b[3][4];
receivevector(a);
recievematrix((int)b); // <----- warning: passing argument 1 of 'recievematrix' from incompatible pointer type [enabled by default]|
return 0;
}
int functiondouble(int b) {
int a;
a = 2*b;
return a;
}
void notreturnanything(int a, int b) {
printf("%d\n",a+b);
}
没关系。这两个功能没问题。他们收到一个没有问题的值。
void byreference(int *b) {
*b = 7;
}
void receivevector(int v[]) {
scanf("%d", &v[0]);
}
void recievematrix(int m[][1]) {
scanf("%d", &m[1][1]);
}
这是一个证明如何在C中使用数组,但是错误而不是错误在哪里。
答案 0 :(得分:1)
这......
int b[3][4];
...声明一个包含四个int
的三个数组的数组。鉴于该声明,在大多数表达式中,数组名b
被转换为指向其第一个元素的指针;也就是说,指向一个包含四个int
s(int (*)[4]
);
这......
int m[][1]
...声明一个未指定数量的一个int
数组的数组。在函数的参数列表中,它被转换为指向一个int
(int (*)[1]
)的数组的指针。
int (*)[4]
与int (*)[1]
不兼容。要在不更改变量类型b
的情况下解决警告(您当然应该这样做),请将receivematrix()
的签名更改为
void recievematrix(int m[][4]);
或
void recievematrix(int (*m)[4]);
甚至
void recievematrix(int m[3][4]);
就此而言,甚至
void recievematrix(int m[17][4]);
会使警告静音,但我不建议使用它。
答案 1 :(得分:0)
尝试
void recievematrix(int m[3][4])
和
recievematrix(b);