Here我找到了一个看起来像这样的变量定义:
struct sockaddr *ai_addr;
似乎是定义了一个指向struct sockaddr
类型变量的指针,但是
1)struct是一个关键字
2)struct sockaddr test;
会产生错误
aggregate 'sockaddr test' has incomplete type and cannot be defined
(我在gcc 4.7.1下工作)
答案 0 :(得分:5)
在本声明中
struct sockaddr *ai_addr;
使用了所谓的详细类型说明符。这个陈述做了两件事。首先,它声明类型名称sockaddr
并声明这种类型的指针。
要声明指向结构的指针,不需要定义结构,因为指针的大小不依赖于结构的大小,因此它将是一个完整的类型。
对于本声明
struct sockaddr ai_addr;
编译器发出错误,因为它需要为类型struct sockaddr
的对象分配内存,但它不知道结构的大小,因为结构尚未定义。那是结构是不完整的类型。它只是声明但尚未定义,其大小未知。
答案 1 :(得分:-1)
struct实际上不是一个简单的数据类型。它是一种复杂的数据类型,其工作方式类似于数据结构,您可以将不同类型的数据放在一起。例如,如果要在结构中保存名片的数据(由struct关键字声明),可以这样定义:
struct bizcard {
char name[30];
char organization[50];
char email[50];
};
另一个例子:
struct student {
char name[30];
int registration_no;
float cgpa;
}
有关详情,请查看:http://en.wikipedia.org/wiki/Struct_(C_programming_language)