1

我有一些问题。我有点难以理解这段代码。它到底在做什么?

例如:

typedef struct dynArrStruct 做了什么,为什么它的末尾有 dynArr?我知道 typedef 的定义为“允许为已知数据类型创建别名”,但这对我来说是行话。有人可以尝试用外行的话吗?谢谢!

为什么有 2 个结构变量(a1/a2)?

如果需要,链接到完整代码:

http://www.cs.uic.edu/pub/CS211/CS211LectureNotesS13/dynArr.c

typedef struct dynArrStruct
{
    double *location;
    int length;
    int currSize;
} dynArr;

int main (int argc, char**argv)
{
    struct dynArrStruct a1;
    dynArr a2;
    int i;

    //rest of code
}
4

3 回答 3

3

做什么typedef struct dynArrStruct以及为什么在它dynArr的末尾有?

typedef为类型创建别名以节省您的键入时间或提高可读性。在这种特殊情况下,它会dynArrstruct dynArrStruct.

没有 a typedef,即只有这个

struct dynArrStruct
{
    double *location;
    int length;
    int currSize;
};

struct dynArrStruct每次需要声明该类型的变量时,您都将被迫编写struct。有了 a typedef,您可以简单地编写dynArr,编译器会将其解释struct dynArrStruct为 。

于 2013-02-19T01:57:04.783 回答
2
typedef struct dynArrStruct
{
    double *location;
    int length;
    int currSize;
} dynArr;

是两段不同代码的简短形式。

// define a struct by name dynArrStruct
struct dynArrStruct
{
    double *location;
    int length;
    int currSize;
}; 

//Example of use
struct dynArrStruct d1;

// define an alias to "struct dynArrStruct" called dynArr
typedef struct dynArrStruct dynArr; 


//Example of use
dynArr d2; //whoa so short!
于 2013-02-19T02:00:41.733 回答
0

除了dasblinkenlight的回答,

Why are there 2 struct variables (a1/a2)?

呈现的代码似乎是模块化不良代码(a1)和良好模块化代码(a2)的示例。对 的修改a1与对 的修改非常相似a2。但是,对 的修改a2被抽象为函数(第 53-55 行对应于 中的行init,第 57-58 行对应于push和中的行push),因此可以轻松重用该功能。这种重用的一个例子是第 69-72 行。

于 2013-02-19T02:10:08.833 回答