从不兼容指针类型传递参数1'recievematrix'
问题描述:
#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);
}
没问题。这两个功能没有问题。他们收到一个没有问题的价值。从不兼容指针类型传递参数1'recievematrix'
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中工作的数组,但拉错误而不是错误在哪里。
答
尝试
void recievematrix(int m[3][4])
而且
recievematrix(b);
答
这...
int b[3][4];
...声明四个int
三大数组的数组。鉴于该声明,在大多数表达式中,数组名b
被转换为指向其第一个元素的指针;也就是指向四个数组的指针int
(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]);
会使警告无效,但我不建议使用它。
为了代码的可读性,建议为函数和变量名称使用'骆驼'情况 – user3629249 2015-03-31 22:16:01
应始终检查scanf()函数的返回值和函数系列,以确保操作在此调用上成功 – user3629249 2015-03-31 22:18:53
(也许是类似的调用)'recievematrix((int)b);'被调用的函数需要一个指向int的指针,而不是int。也许使用:'recievematrix((int *)b);' – user3629249 2015-03-31 22:22:58