【问题标题】:Can I get some help interpreting this code?我可以得到一些帮助来解释这段代码吗?
【发布时间】:2015-11-01 04:20:27
【问题描述】:

所以我正在为学校编写代码,但我需要一些帮助来理解这个正在创建的结构和 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、一个 int 类型的 rows 和一个 int 类型的 cols?

我也不明白最后一行。我知道它正在定义一些东西并给它一个matrix_ptr标签,但它是否将结构的别名定义为指针?我不确定如何解释。

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

感谢您的宝贵时间。

【问题讨论】:

    标签: c pointers struct typedef


    【解决方案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;
    

    【讨论】:

      【解决方案2】:

      这是否定义了一个matrix_2D_struct类型的结构...

      我会说一个名为 matrix_2D_struct 的类型是一个结构,而不是一个结构是一个类型,否则是的。

      其中包含一个指向名为 data_arr 的 int 类型指针、一个名为 rows 的 int 和一个名为 cols 的 int 指针?

      是的。

      我也不明白最后一行。我知道它正在定义一些东西并给它一个matrix_ptr标签,但它是否将结构的别名定义为指针?

      在 C 语言中,您通常将数据作为指针传递。这有很重要的原因——例如,您可以将结构化数据传递给函数,并且该函数可以更改数据的内部结构(rowscols,甚至是data_arr)。为结构定义类型后,通常会为指向该结构的指针定义类型。这就是matrix_ptr。您将可能传递此信息,而不是 matrix_2D_struct

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

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

      【讨论】:

        【解决方案3】:

        matrix_ptrstruct matrix_2D_struct * 的别名。

        【讨论】:

        • 和 struct matrix_2D_struct * 是一个指向 matrix_2D_struct 类型结构的指针?
        • @JustaRedShirt struct matrix_2D_struct * 是一个 struct matrix_2D_struct 指针
        猜你喜欢
        • 2015-07-14
        • 1970-01-01
        • 2018-07-23
        • 2019-02-01
        • 1970-01-01
        • 2016-08-17
        • 2011-08-20
        • 1970-01-01
        • 2011-11-24
        相关资源
        最近更新 更多