所以我正在为学校编写代码,但我需要一些帮助来理解这个正在创建的struct和typedef
struct matrix_2D_struct {
int** data_arr;
int rows;
int cols;
};
typedef struct matrix_2D_struct * matrix_ptr;
这是否定义了一个类型为matrix_2D_struct的结构,它包含一个指向int类型指针的指针,名为data_arr,一个名为rows的int,一个名为cols的int?
我也不明白最后一行。我理解它定义了一些东西并给它一个matrix_ptr的标签,但它是否将结构的别名定义为指针?我不确定如何解释它。
另外,我可以使用calloc将data_arr定义为二维数组吗?
谢谢你的时间。答案 0 :(得分:1)
有时你会看到一些像这样的定义:
unsigned long long var;
如果你的程序有很多unsigned long long
,那就太麻烦了。通过使用typedef定义一个新类型来缩短它,例如:
typedef unsigned long long ULL;
现在您只需编写ULL var;
与struct相同,而不是每次struct dummy var
使用typedef定义基于struct dummy
的新类型,而不是写这样:
typedef struct dummy DUMMY;
DUMMY myVar; // the type of myVar is a struct dummy
与指针相同,您可以定义一个类型为指针的新类型,例如:
typedef struct dummy* P_DUMMY;
P_DUMMY myVarPtr; // the type of myVarPtr is a pointer to struct dummy;
答案 1 :(得分:1)
这是否定义了matrix_2D_struct类型的结构...
我会说一个名为matrix_2D_struct
的类型是一个结构,而不是一个类型的结构,但是否则是。
包含一个指向int类型指针的指针,名为data_arr,一个名为rows的int,一个名为cols的int?
是
我也不了解最后一行。我理解它定义了一些东西并给它一个matrix_ptr标签,但它是否将结构的别名定义为指针?
在C中,您通常将数据作为指针传递。这有一个重要原因 - 例如,一个是你可以将结构化数据传递给一个函数,并且该函数可以改变数据的内部结构(rows
,cols
,甚至data_arr
)。为结构定义类型后,通常会为结构的指针定义类型。 matrix_ptr
是什么。您将可能传递此信息,而不是matrix_2D_struct
。
另外,我可以使用calloc将data_arr定义为二维数组吗?
这个问题有点模糊,但我不明白为什么不这样做。我也不明白为什么你不能使用malloc()
来分配内存。
答案 2 :(得分:1)
matrix_ptr
是struct matrix_2D_struct *
的别名。