结构在变量定义中意味着什么?C++

use*_*963 -7 c c++ struct

在这里,我发现了一个看起来像这样的变量定义:

struct sockaddr *ai_addr;    
Run Code Online (Sandbox Code Playgroud)

它似乎是定义一个指向类型变量的指针struct sockaddr,但是

1)struct是一个关键字

2)struct sockaddr test;产生错误

aggregate 'sockaddr test' has incomplete type and cannot be defined
Run Code Online (Sandbox Code Playgroud)

(我在gcc 4.7.1下工作)

Vla*_*cow 5

在这个声明中

struct sockaddr *ai_addr; 
Run Code Online (Sandbox Code Playgroud)

使用了所谓的精心设计的说明符.这个陈述做了两件事.首先,它声明了类型名称sockaddr并声明了这种类型的指针.

要声明指向结构的指针,不需要定义结构,因为指针的大小不依赖于结构的大小.

对于这个声明

struct sockaddr ai_addr;
Run Code Online (Sandbox Code Playgroud)

编译器发出错误,因为它需要为类型的对象分配内存,struct sockaddr但它不知道结构的大小,因为结构尚未定义.那是结构是不完整的类型.它只是声明但尚未定义,其大小未知.