C函数原型,编译错误

nin*_*ies 0 c

C新手在这里.试图找出我的程序中的错误.

功能原型:

float* convolve(int (*)[10], int (*)[3], int *, int);
Run Code Online (Sandbox Code Playgroud)

实际功能:

float* convolve(int* ImdataPtr, int* KernelPtr, int* size, int sizeKernel)
Run Code Online (Sandbox Code Playgroud)

如何在main中调用它:

float* output;
output = convolve(input,kernel,sizeIm,3);
Run Code Online (Sandbox Code Playgroud)

编译错误:

program.c:55:8: error: conflicting types for ‘convolve’
Run Code Online (Sandbox Code Playgroud)

请帮忙...

Rei*_*ica 6

问题是原型不匹配.确保类型是完全一样的,因为int(*)[10]int(*)[3]不同类型的比int*:

float* convolve(int(*)[10], int(*)[3], int*, int);

float* convolve(int (*ImdataPtr)[10], int (*KernelPtr)[3], int* size, int sizeKernel) {
    // etc
}
Run Code Online (Sandbox Code Playgroud)

您可以(也可能应该)使它们完全相同,包括参数名称:

float* convolve(int (*ImdataPtr)[10], int (*KernelPtr)[3], int* size, int sizeKernel);

float* convolve(int (*ImdataPtr)[10], int (*KernelPtr)[3], int* size, int sizeKernel) {
    // etc
}
Run Code Online (Sandbox Code Playgroud)

我不得不查找如何声明这些,所以你可能会发现C指针指向数组/指针数组的问题消歧也很有用.int*[3]是一个指针数组int(只是向后读),但是int(*)[3]指向数组的指针int.

  • 将参数名称放入原型中没有任何害处.对于正在使用头文件的其他人来说这是一件非常好的事情,这样他们就可以更好地了解你的意图. (2认同)