简体   繁体   中英

Difference between “struct foo*” and “foo*” where foo is a struct?

In C, is there a difference between writing "struct foo" instead of just "foo" if foo is a struct?

For example:

struct sockaddr_in sin;
struct sockaddr *sa;

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

Thanks /Erik

In fact, in standard "C" it's required to specify struct keyword. This is optional in C++.

This is the reason some people define structs like this:

typedef struct foo { ... } bar;

to be able to use bar instead of struct foo . However, some C compilers do not enforce this rule.

Yes. In C (as opposed to C++), structs are in their own namespace. So if you defined a

struct sockaddr { ... }

you may not use it as

sockaddr s;
sockaddr *ps;

In order to make that legal, you may use typedef in order to import into the non-struct namespace of type names:

typedef struct sockaddr { ... } sockaddr;
sockaddr s, *p;

如果你输入它,你可以只使用“foo”。

It depends on how the struct is defined. If it is defined using a typedef you dont have to put the stuct keyword in front.

typedef struct 
{
//
} aStruct;

aStruct abc;

but if its not a typedef you need the struct keyword.

struct aStruct
{
//
} ;

struct aStruct abc;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM