我可以帮助解释一下这段代码吗?

时间:2015-11-01 04:20:28

标签: c pointers struct typedef

所以我正在为学校编写代码,但我需要一些帮助来理解这个正在创建的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定义为二维数组吗?

谢谢你的时间。

3 个答案:

答案 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中,您通常将数据作为指针传递。这有一个重要原因 - 例如,一个是你可以将结构化数据传递给一个函数,并且该函数可以改变数据的内部结构(rowscols,甚至data_arr)。为结构定义类型后,通常会为结构的指针定义类型。 matrix_ptr是什么。您将可能传递此信息,而不是matrix_2D_struct

  

另外,我可以使用calloc将data_arr定义为二维数组吗?

这个问题有点模糊,但我不明白为什么不这样做。我也不明白为什么你不能使用malloc()来分配内存。

答案 2 :(得分:1)

matrix_ptrstruct matrix_2D_struct *的别名。