不兼容的指针数组2D

时间:2019-01-22 16:17:00

标签: c

我是C语言的新手,我必须为学校做一个程序。 我有3节课: lab11.c(主) procs.c 进程 我每次都会收到此错误:

error: conflicting types for 'transposarMatriu'|
\procs.h|171|note: previous declaration of 'transposarMatriu' was here|

我的代码(主要):

char matriu_ori[T_DIM_MAX][T_DIM_MAX];
char matriu_dst[T_DIM_MAX][T_DIM_MAX]
transposarMatriu(matriu_ori, *matriu_dst, mida, mida);

Procs.h

extern void transposarMatriu(char matriu_ori[][T_DIM_MAX], char matriu_dst[][T_DIM_MAX], int nfiles, int ncols);

Procs.c

void transposarMatriu(char matriu_ori[][T_DIM_MAX], char *matriu_dst[][T_DIM_MAX], int nfiles, int ncols) {
int c,d;
    for (c = 0; c < nfiles; c++) {
        for( d = 0 ; d < ncols ; d++ ) {
            *matriu_dst[d][c] = matriu_ori[c][d];
        }
    }
}

2 个答案:

答案 0 :(得分:1)

问题来自procs.c中的函数定义与procs.h中的函数声明之间的差异。

Procs.h

extern void transposarMatriu(char matriu_ori[][T_DIM_MAX], char matriu_dst[][T_DIM_MAX], int nfiles, int ncols);

函数签名必须相同,如您所见,在这种情况下,该签名不是相同的,在procs.c中,第二个参数的类型为char*,而不是char,而在{{ 1}}。

Procs.c

procs.h

答案 1 :(得分:0)

TL; DR :删除 lab11.c procs.c 中的星号:transposarMatriu([...] *matriu_dst [...])

procs.c transposarMatriu的函数定义声明matriu_dst的类型为指向char(*matriu_dst[][])的指针数组的数组(请参见{ {3}}(如果您想学习解密C声明)。可能不是您想要的,并且与 procs.h 中的函数声明不匹配。

我假设您希望matriu_dst像通过引用调用一样是“可修改的”,但是没有必要。数组按地址传递给函数,因此默认情况下它们是“可修改的”。

基于相同的推理,无需在 main.c 中取消引用matriu_dst(应用*运算符)。实际上,这样做意味着您要将数组的第一个元素传递给函数(一个字符数组)。