2013-02-19 6 views
1

У меня есть пара вопросов. Мне немного сложно понять этот код. Что именно он делает?Структура динамической структуры массива C

Например:

Что ЬурейеЕ структуры 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

Что typedef struct dynArrStruct делать и почему это имеет dynArr в конце этого?

typedef создает псевдоним типа, который позволяет вам печатать некоторые данные или улучшать читаемость. В этом конкретном случае он создает псевдоним dynArr для struct dynArrStruct.

Без typedef, то есть только с этим

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

вы будете вынуждены писать struct dynArrStruct каждый раз, когда вам нужно объявить переменную этого типа struct «s. С typedef вы можете написать просто dynArr, а компилятор будет интерпретировать его как struct dynArrStruct для вас.

+0

Так было бы идеально всегда печатать каждую структуру? – juice

+1

также можно полностью опустить слово «dynArrStruct» в код, делая выражение «struct dynArrStruct» конечно недействительным и должно быть заменено на 'dynArr' в main() – cIph3r

+0

@juice Да, это правильно. На самом деле, многие магазины программирования C требуют от программистов 'typedef' каждой' struct', которую они могут определить, и предоставляют стандарты кодирования, объясняющие, как должно быть связано именование этих двух.Более того, C++ делает это для вас по умолчанию - достаточно объявить 'struct' без' typedef', а имя 'struct' станет пригодным для использования без ключевого слова' struct'. – dasblinkenlight

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! 
0

В дополнение к ответу dasblinkenlight, в

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

Код, представленный, как представляется, является примером плохо уровне модуля кода (а1) и хорошо уровне модуля кода (a2) , Изменения, внесенные в a1, очень похожи на модификации, сделанные в a2. Однако модификации, сделанные в a2, абстрагируются на функции (строки 53-55 соответствуют строкам, найденным в init, 57-58 соответствуют строкам, найденным в push и push), так что эта функциональность может быть легко использована повторно. Примером такого повторного использования являются строки 69-72.

Смежные вопросы