Тип определения структур - PullRequest
1 голос
/ 07 октября 2010

Я использую структуры в своем проекте следующим образом:

typedef struct
{
    int str1_val1;
    int str1_val2;
} struct1;

и

typedef struct
{
    int str2_val1;
    int str2_val2;
    struct1* str2_val3;
} struct2;

Возможно ли, что я взломаю это определение таким образом, чтобы я использовал толькотипы с моим кодом, например

struct2* a;
a = (struct2*) malloc(sizeof(struct2));

без использования ключевого слова struct?

Ответы [ 4 ]

2 голосов
/ 07 октября 2010

Да, следующим образом:

struct _struct1
{
...
};
typedef struct _struct1 struct1;

struct _struct2
{
...
};
typedef struct _struct2 struct2;

...

struct2 *a;
a = (struct2*)malloc(sizeof(struct2));
0 голосов
/ 08 октября 2010

в качестве сноски.Если вы пишете код на C ++, вам не нужно делать typedef;структура автоматически является типом.

0 голосов
/ 08 октября 2010

Просто чтобы поделиться, я видел этот подход, и хотя мне лично он не нравится (мне нравится все с именами и тегами = P, и я не люблю использовать имена переменных в malloc), кто-то может.

typedef struct {
    ...
} *some_t;

int main() {
    some_t var = (some_t) malloc(sizeof(*var));
}
0 голосов
/ 07 октября 2010

Да, вы можете использовать символ typedef без ключевого слова struct.Компилятор просто использует это имя в качестве псевдонима для структуры, которую вы определили ранее.

В одном примере в вашем примере malloc возвращает указатель на память.Следовательно, ваше утверждение должно читаться как

a = (struct2 *)malloc(sizeof(struct2));
...