2015-05-21 29 views
6

我最近开始研究关于结构和指针,但是我并没有完全理解关于struct的设计。我理解struct的声明,即typedef struct Alias及其内容,但我不明白Get_noAllyp*no_getOf在声明结束时。他们是什么?我也找不到一个好的来源。如何将一个struct定义为多个名字?

typedef struct Alias { 
    char *s_a_name; 
    char **s_aliases; 
    short *s_dumr; 
    int  s_get_sum; 
}Get_noAllyp, *no_getOf; /*Here, I don't understand this one. 
         Where did these two variables come from? 
         And one of them is a pointer.*/ 
+4

请勿同时使用'C'和'C++'标记。他们是不同的语言,他们有不同的规则(尽管他们有很多共同点)。 – axiac

+0

发布代码创建两种类型(Get_noAllyp和* no_getOf)但是,结构标签名称是'别名',因此这两种类型的名称非常不符合要求。误导性的类型名称会导致误解,代码错误等。一般来说,绝对不要使用typedef结构体定义。编写'struct Alias'或'struct Alias *'要比试图记住'no_getOf'实际上是一个指针并且实际上是一个指向结构Alias的指针要清楚得多。 Typedef'ing结构混淆了代码,导致错误理解,并且使编译器名称空间混乱。 – user3629249

+0

@ user3629249好的,谢谢你,先生!但是代码片段仅仅是如何在源代码中看到一些结构的一个纯粹的例子,因此如果结构在其末尾有一些糟糕的名字,非常烦人,如上所述。我明白,这样的结构名称不是一个好的做法,而且很混乱。但是,我仍然需要澄清,即使它是_Alias和* pAlias :) –

回答

9

它定义了多个typedef S,即multilple“名称”同样的事情,而第二个是一个指向它。

第一个Get_noAllyp是结构的名称,no_getOf代表一个指向它的指针。

也就是说,编写no_getOf与在函数签名或变量声明中编写Get_noAllyp *完全相同。

+1

哦..真棒,我真的需要了解这一个,因为当这样的结构出现时,我不能简单地理解一件简单的事情。谢谢马克 –

+1

没问题。请接受我的答案,如果它帮助你。 –

+1

@CalCharlesFox不用担心,在[接受](http://meta.stackexchange.com/q/5234)这个答案后,你就可以。 :-) –

7

在这里,有两个typedef在短暂的方式。上述typedef可以分解等

typedef struct Alias { 
    char *s_a_name; 
    char **s_aliases; 
    short *s_dumr; 
    int  s_get_sum; 
}Get_noAllyp;     

typedef struct Alias * no_getOf; 

所以,

  • Get_noAllyp表示struct Alias
  • no_getOf表示struct Alias *
+0

哦真棒..指针之一是表示结构的指针?真棒,谢谢Sourav! –

+1

@CalCharlesFox不客气。 :-) –

3

的代码:

struct Alias { 
    char *s_a_name; 
    char **s_aliases; 
    short *s_dumr; 
    int  s_get_sum; 
} 

定义了一个新的数据类型,名称为Alias,并且是一个structC语言的原始设计在这里有点笨拙,因为它要求在使用结构类型名称时始终使用关键字struct作为前缀。

这意味着代码:

struct Alias { 
    char *s_a_name; 
    char **s_aliases; 
    short *s_dumr; 
    int  s_get_sum; 
} Get_noAllyp, *no_getOf; 

声明struct Alias类型的可变Get_noAllyppointer to struct Alias类型的可变no_getOf

通过将typedef关键字在前面,标识符Get_noAllypno_getOf成为类型(和不变量)。

Get_noAllypstruct Alias相同,并且no_getOfstruct Alias *(即指向结构别名的指针)相同。

现在你可以这样写:

struct Alias x; 
struct Alias *y; 

Get_noAllyp x; 
no_getOf y; 

申报x作为作为pointer to a struct Alias类型的变量struct Alias类型和y的变量。

+0

真棒解释@axiac!谢谢:)我终于可以读取代码,从而以更好的方式写入! –

相关问题