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、タイピングを節約したり、読みやすさを向上させたりするために、タイプのエイリアスを作成します。この特定のケースでは、。に対して呼び出されるエイリアスを作成しdynArrますstruct dynArrStruct

なしtypedef、つまりこれだけで

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

そのタイプのstruct dynArrStruct変数を宣言する必要があるたびに、書き込みを強制されます。structがあれば、typedef簡単に書くことができdynArr、コンパイラはそれをあなたに代わって解釈struct dynArrStructします。

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

2つの異なるコードの短縮形です。

// 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

In addition to dasblinkenlight's answer,

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

The code presented appears to be an example of poorly modularised code (a1) and well modularised code (a2). The modifications made to a1 are very similar to the modifications made to a2. However, the modifications made to a2 are abstracted out into functions (lines 53-55 correspond to the lines found in init, 57-58 correspond to the lines found in push and push), so that that functionality can be easily reused. An example of this reuse is lines 69-72.

于 2013-02-19T02:10:08.833 に答える