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

时间:2014-08-07 20:06:24

标签: c++ c struct

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下工作)

2 个答案:

答案 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)