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

Eri*_*ebo 6 c struct typedef

在C中,如果foo是结构,那么在编写"struct foo"而不仅仅是"foo"之间是否存在差异?

例如:

struct sockaddr_in sin;
struct sockaddr *sa;

// Are these two lines equivalent?
sa = (struct sockaddr*)&sin;
sa = (sockaddr*)&sin;
Run Code Online (Sandbox Code Playgroud)

谢谢/ Erik

Meh*_*ari 11

实际上,在标准"C"中,需要指定struct关键字.这在C++中是可选的.

这就是有些人定义这样的结构的原因:

typedef struct foo { ... } bar;
Run Code Online (Sandbox Code Playgroud)

能够bar代替使用struct foo.但是,某些C编译器不会强制执行此规则.


Avi*_*Avi 6

是.在C(而不是C++)中,结构体位于它们自己的命名空间中.所以,如果你定义了一个

struct sockaddr { ... }
Run Code Online (Sandbox Code Playgroud)

你可能不会用它

sockaddr s;
sockaddr *ps;
Run Code Online (Sandbox Code Playgroud)

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

typedef struct sockaddr { ... } sockaddr;
sockaddr s, *p;
Run Code Online (Sandbox Code Playgroud)