动态数组栈结构C.

时间:2013-02-19 01:51:50

标签: c struct typedef

我有几个问题。理解这段代码我有点困难。到底是做什么的?

例如:

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
}

3 个答案:

答案 0 :(得分:3)

  

typedef struct dynArrStruct做了什么,为什么它最后有dynArr

typedef为类型创建别名以节省您的输入,或提高可读性。在这种特殊情况下,它会为dynArr创建一个名为struct dynArrStruct的别名。

没有typedef,即只有这个

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

每次需要声明struct dynArrStruct类型的变量时,您将被迫写struct。如果有typedef,您只需编写dynArr,编译器就会将其解释为struct dynArrStruct

答案 1 :(得分: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!

答案 2 :(得分:0)

除了dasblinkenlight的回答,

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

所呈现的代码似乎是代码模块化程度较低的代码(a1)和模块化代码(a2)的一个例子。对a1所做的修改与对a2所做的修改非常相似。但是,对a2所做的修改被抽象为函数(第53-55行对应于init中的行,57-58对应于push和{{中的行。 1}}),以便可以轻松地重用该功能。这种重用的一个例子是第69-72行。