通过' recievematrix'的论证1来自不兼容的指针类型

时间:2015-03-31 21:50:59

标签: c windows

#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中使用数组,但是错误而不是错误在哪里。

2 个答案:

答案 0 :(得分:1)

这......

int b[3][4];

...声明一个包含四个int的三个数组的数组。鉴于该声明,在大多数表达式中,数组名b被转换为指向其第一个元素的指针;也就是说,指向一个包含四个int s(int (*)[4]);

的数组的指针

这......

int m[][1]

...声明一个未指定数量的一个int数组的数组。在函数的参数列表中,它被转换为指向一个intint (*)[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);