我的结构代码就像这样:
typedef struct
{
int w;
int h;
float m[w][h];
} Matrix;
但我只是得到了这个错误:
“错误:'w'在这里未声明(不在函数中)”
“错误:'h'未声明(不在函数中)”
如何正确编码此结构?
答案 0 :(得分:1)
Muli的答案显示了如何解决您的问题。以下是编译失败的解释:编译器不知道为每个Matrix结构声明分配多少内存的边界,因为在编译时不知道维度(w和h的值)。如果在构建时已知m阵列的最大尺寸,则可以使用预定义的大小结构,如
#define MAX_W 10
#define MAX_H 10
struct {
int w;
int h;
float m[MAX_W][MAX_H];
};
struct matrix my_matrix;
...
之后,您可以根据需要声明和使用矩阵结构。 这种方法的缺点是分配的内存超过了必要的成本。
遵循linux内核编码gudelines,我不喜欢使用typedef,因为它们倾向于使数据定义不透明:如果某些东西在其他地方声明为typedefined类型,理解这是一个结构稍微复杂一些。
答案 1 :(得分:0)
您的代码无法编译。 C与Java和高级语言不同。
typedef struct
{
int w;
int h;
float **elements;
} Matrix;
Matrix* initializeMatrix(int w,int h){
Matrix * matrix;
int i,j;
if( NULL == (matrix = malloc(sizeof(Matrix))) ) {
printf("malloc failed\n");
return NULL;
}
matrix.w=w;
matrix.h=h;
if( NULL == (matrix->elements = malloc(w * sizeof(float*))) ) {
printf("malloc failed\n");
free(matrix);
return NULL;
}
for(i = 0; i< matrix.w ; i++){
if( NULL == (matrix->elements[i] = malloc(h * sizeof(float))) ) {
printf("malloc failed\n");
for(j = i ; j>=0 ; j--)
free(matrix->elements[j]);
free(matrix);
return NULL;
}
}
return matrix;
}