为了个人娱乐,我正在学习C。我正在尝试编写矩阵计算标头。我有一个函数显示矩阵rmat_show(rmatrix * r),该函数应该打印整个矩阵。但是,似乎我的数据类型rmatrix无法很好地传递给此函数。
rmat.h:
// Matrix struct, m x n matrix. Pointer *value points to the contents.
struct srmatrix {
int m,n;
float *value;
};
typedef struct srmatrix rmatrix;
// Show the matrix
void rmat_show(rmatrix* r) {
int i, j;
printf("\nshow\n");
printf("[%dx%d]\n",r->m,r->n);
for (i = 0; i < r->m; i++) {
for (j = 0; j < r->m; j++) {
printf("%d\t",value[(j-1)*r->m+i-1]);
}
printf("\n");
}
}
我将其作为主文件:
#include "rmat.h"
int main(int argc, char **argv){
float val[] = {0.1};
rmatrix *r = malloc(sizeof(rmatrix));
r->n = 1;
r->m = 1;
r->value = val;
rmat_show(r);
return 0;
}
在rmat_show之后,我尝试使用另一个函数杀死te矩阵。它会产生相同的错误,即:'rmat_show'的参数1的类型不兼容,预期为'rmatrix',但参数的类型为'struct rmatrix *'。我尝试搜索“指向typedef的指针”和类似术语,但没有结果。我相信typedef声明不会保留到函数定义中。我在Windows 7上使用msys和mingw。
谢谢您的帮助。
编辑:添加了我误复印的typedef行。
这
struct srmatrix {
int m,n;
float *value;
};
...
void rmat_show(rmatrix* r)
{
...
for (i = 0; i < r->m; i++)
{
for (i = 0; i < r->m; i++)
{
printf("%d\t", value[(n-1)*r->m+m-1]);
}
printf("\n");
}
...
应该是这个
rmat.h:
#ifndef RMAT_H
#define RMAT_H
typedef struct rmatrix_s {
size_t m, n; /* There is no need to define dimension as signed. */
float * value;
} rmatrix_t;
void rmat_show(rmatrix_t * r);
#endif
rmat.c:
...
#include "rmat.h"
void rmat_show(rmatrix_t * r)
{
...
for (size_t j = 0; j < r->n; j++)
{
for (size_t i = 0; i < r->m; i++)
{
printf("%d\t", value[j*r->m + i]);
}
printf("\n");
}
这样主要的将具有:
...
#include "rmat.h"
int main(int argc, char **argv)
{
...
rmatrix_t * r = malloc(sizeof(*r));
...
要编译此代码,请执行以下操作:
gcc -g -Wall -Wextra -o main main.c rmat.c
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句