MSDN中的结构体部分

原创 2004年08月05日 13:09:00

typedef<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

typedef 类型-声明 同义字;

Typedef关键字定义由其指定的 类型-声明 的同义字。类型-声明 中的声明标识符成为类型的另一个名称(即别名),别名的作用是在命名属于该类型的实例时替换类型名称。同样可以在函数定义中使用typedef指派符。

Typedef 引入了一个名称,该名称在 Typedef声明范围内的decl-specifiers部分中声明,以作为类型的同义字。与class struct union enum等声明符相比,typedef 声明符并未引入新的类型,而是引入了已有类型的新的名称。

Example

// 使用 typedef 关键字的例子

ulong ul;     // 相当于 "unsigned long ul;"

mystruct ms;   // 相当于 "struct mystructtag ms;"

 

typedef int (*funcptr)();  // funcptr  "指向返回值为

                           //    整型的函数的指针" 的同义字

 

funcptr table[10];   //相当于 "int (*table[10])();"

struct

struct [标签] { 成员-列表 } [声明符];

[struct] 标签 声明符;

Struct关键字的作用是定义一种结构体类型和(或者)一种结构体类型变量。更多信息请查看匿名结构体结构体中的可变数组部分。

结构体类型是一种用户自定义复合类型。它由不同类型的“域”或“成员”组成。

C++中,结构体和类相同,但默认情况下结构体的成员是公有的。

使用结构体

C语言中,必须明确地使用struct关键字声明一种结构体。在C++中,一旦定义了类型就不需要再使用struct关键字了。

声明结构体类型变量时,结构体类型成员置于一对花括号中,成员之间通过分号分隔。

相关信息请查看class union enum部分。

Example 1

struct PERSON              // 声明 PERSON 结构体类型

{

   int   age;              //声明成员类型

} family_member;           // 声明PERSON类型对象

 

   struct PERSON sister;   // C风格声明结构体体

   PERSON brother;         // C++ 风格声明结构体体

 

   sister.age  = 13;       // 为结构体成员赋值

可以在声明结构体变量时将变量初始化,初始化的值放在一对花括号中。

Example 2

struct POINT            // 声明 POINT 结构体

} spot = { 20, 40 };    // 变量spot 中成员的值

struct POINT there;     // 变量therePOINT类型

struct CELL             // 声明 CELL 字节域

} screen[25][80];       // 字节域数组


匿名结构体

Microsoft 细节 —>

Microsoft C 的一个扩展就是允许用户在一个结构体中声明另一个结构体,声明的这个结构体可以不对其进行命名。这种被嵌套的结构体就称为匿名结构体。C++并不允许匿名结构体。

可以象访问包含匿名结构体的结构体中的成员一样的方式访问匿名结构体中的成员。

Microsoft 细节结束

Example

// 匿名结构体示例

struct person

{

   char   name[30];

   char   sex;

   int    age;

   int    weight;

   struct phone;    // 匿名结构体; 不需名称

} Jim;

 

Jim.number = 1234567;

结构体中的可变数组

Microsoft 细节 —>

Microsoft扩展允许CC++结构体或类的最后一个成员可以是一个可变大小的数组。这种数组称为可变数组。结构体最后的可变数组允许增加可变长度的字符串或其他数组,因此避免了运行时执行指针销毁的开销。

struct PERSON

{

   unsigned number;

   char     name[];    // 可变数组

};

如果对这个结构体使用sizeof操作符,最后的数组成员大小考虑为0。该数组的大小为2字节,这个大小也是未指定成员的大小。要获得PERSON类型变量的大小则需要单独获得其中数组的大小。

结构体的大小根据数组大小获得分配的总大小。分配空间后,数组则被拷贝到结构体的数组成员中。

struct PERSON *ptr;

char who[40];

 

printf( "Enter name: " );

gets( who );

 

// 为结构体,名称和终止NULL分配空间

ptr = malloc( sizeof( struct PERSON ) + strlen( who ) + 1 );

 

// 拷贝字符串到name成员

strcpy( ptr->name, who );

一旦初始化结构体中的可变数组,sizeof操作符返回的大小将不含数组的大小。

可以初始化包含可变数组的结构体,但不能初始化结构体数组。

struct PERSON me  = { 6, "Me" };        // 

struct PERSON you = { 7, "You" };

 

struct PERSON us[2] = { { 8, "Them" },  // 

                        { 9, "We" } };

字符数组以字符串初始化后将获得终止NULL的空间;以多个独立的字符初始化的字符数组(例如:{'a', 'b', 'c'})则不会有终止NULL

包含可变数组的结构可出现在另一个结构体中,就象作为包含它的结构体的最后一个成员的声明一样。包含可变数组的类或结构体不能有直接或间接的虚基础(virtual bases)。

相关信息, 请查看 volatile #define部分。

Microsoft 细节结束

MSDN中的结构体部分

typedeftypedef 类型-声明 同义字;Typedef关键字定义由其指定的 类型-声明 的同义字。类型-声明 中的声明标识符成为类型的另一个名称(即别名),别名的作用是在命名属于该类型的实例...
  • benchmark
  • benchmark
  • 2004-08-05 13:09:00
  • 1148

TCITEM结构体

Specifies or receives the attributes of a tab item. It is used with the TCM_INSERTITEM, TCM_GETITEM,...
  • Qsir
  • Qsir
  • 2017-07-17 15:28:31
  • 120

C# 结构体的构造函数与初始化

     C#中结构都有一个默认的不带参数的构造函数, 用于对结构的字段进行初始化,并且结构的默认构造函数不能被重写。     C#结构体构造函数之中定义的数组还可以通过构造函数传参数进行初始化操作!...
  • onlyou930
  • onlyou930
  • 2010-05-11 10:26:00
  • 10517

关于WNDCLASSEX结构体中cbWndExtra成员的作用

概述   有人问WNDCLASSEX结构体中cbWndExtra成员到底是做什么用的,在网上也查了一些资料,但说的都不太正确,MSDN上说的也较为含糊,但这个cbWndExtra成员的作用确实是较为重...
  • mousebaby808
  • mousebaby808
  • 2014-03-02 19:36:57
  • 3986

结构体对齐

原文:http://blog.chinaunix.net/uid-24227137-id-3499418.html 摘要: /***********************/ 一、字节对...
  • baidu_32712233
  • baidu_32712233
  • 2016-01-25 10:22:49
  • 131

结构体对齐的原则及原因分析

为什么要对齐?     现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需...
  • zhutou_xu
  • zhutou_xu
  • 2014-09-23 09:07:53
  • 331

linux 结构体部分成员初始化

1. 结构体 struct file_system_type { const char *name; int fs_flags; #define FS_REQUIRES_DEV 1 #defi...
  • chenliang0224
  • chenliang0224
  • 2017-12-03 23:05:53
  • 84

数组结构体部分赋值问题

之所以写这个博客,是因为前两天参加了深信服的笔试,整体难度不大,提前半个小时写好了,然后还检查了一遍选择题。在选择题上面,它是选项不确定的。有几道选择题不确定,顿时发现自己的基础还是不扎实呀。下面总结...
  • yuanlairuci1992
  • yuanlairuci1992
  • 2016-10-16 11:28:56
  • 402

MFC中文帮助MFC,函数,类,成员变量,<em>结构体</em>详解

MFC中文帮助MFC,函数,类,成员变量,<em>结构体</em>详解 2009-08-07 上传大小:6.08MB MFC,中文,<em>MSDN</em> MFC中文帮助提供了对MFC编程中所要了解的函数,变量用法.<em>作用</em>,意义的...
  • 2018年04月10日 00:00

socket中的linger结构体的作用

TCP连接断开的时候调用closesocket函数,已经讨论过有优雅的断开和强制断开,那么如何设置断开连接的方式呢?是通过设置socket描述符一个linger结构体属性。 linger结构体数...
  • lishaoyu
  • lishaoyu
  • 2014-06-26 14:07:47
  • 379
收藏助手
不良信息举报
您举报文章:MSDN中的结构体部分
举报原因:
原因补充:

(最多只允许输入30个字)