代码之家  ›  专栏  ›  技术社区  ›  Erik Öjebo

“结构foo*”和“foo*”之间的区别,其中foo是一个结构?

  •  6
  • Erik Öjebo  · 技术社区  · 16 年前

    struct sockaddr_in sin;
    struct sockaddr *sa;
    
    // Are these two lines equivalent?
    sa = (struct sockaddr*)&sin;
    sa = (sockaddr*)&sin;
    

    4 回复  |  直到 16 年前
        1
  •  11
  •   Mehrdad Afshari    16 年前

    事实上,在标准“C”中,需要指定 struct 关键词。在C++中,这是可选的。

    这就是为什么有些人这样定义结构:

    typedef struct foo { ... } bar;
    

    能够使用 bar 而不是 struct foo

        2
  •  6
  •   Avi    16 年前

    struct sockaddr { ... }
    

    你不可以把它当作

    sockaddr s;
    sockaddr *ps;
    

    为了使其合法化,您可以使用typedef导入类型名称的非结构命名空间:

    typedef struct sockaddr { ... } sockaddr;
    sockaddr s, *p;
    
        3
  •  0
  •   Otávio Décio    16 年前

        4
  •  0
  •   Lodle    16 年前

    这取决于结构的定义方式。如果它是用typedef定义的,你不必把stuct关键字放在前面。

    typedef struct 
    {
    //
    } aStruct;
    
    aStruct abc;
    

    但如果不是typedef,则需要struct关键字。

    struct aStruct
    {
    //
    } ;
    
    struct aStruct abc;