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 细节结束

Linux下C结构体初始化[总结]

1、前言   今天在公司看一同事写的代码,代码中用到了struct,初始化一个struct用的是乱序格式,如下代码所示: typedef struct _data_t { in...
  • weiyuefei
  • weiyuefei
  • 2016年07月22日 08:59
  • 426

Unity中的结构体(C#)

结构体和类很像,但完全不同。抱歉:) 如果你不知道结构体,或者你想用结构体,或者你不知道传引用和传值的差别,那么这一课就是为你量身定做。 Unity中的结构体 既然这个系列是为了Unity...
  • liulong1567
  • liulong1567
  • 2016年02月17日 10:45
  • 4593

结构体中运算符的重载

C++中,结构体是无法进行==,>,=, 比如二分查找,binary_crearch只能对数组进行查找,如果是结构体数组的话,它会报错。但很可惜,实际编程中,大部分时候操作对象是结构体数组。 二分查找...
  • sunny1996
  • sunny1996
  • 2016年04月25日 15:15
  • 5955

一种初始化结构体数组的方法

typedef struct { int requestNumber; void (*dispatchFunction) (Parcel &p, struct RequestInfo ...
  • u013485792
  • u013485792
  • 2016年10月13日 09:46
  • 2314

UML--------三大结构

刚一开始接UML,感觉迷迷糊糊的,有许多东西都弄不清楚,自己还是对UML先有个宏观把控在开始学吧!     一、UML概念:UML(Unified Modeling Language) 统一建模语言...
  • u013067402
  • u013067402
  • 2014年11月16日 15:52
  • 1436

UNITY3D c#脚本中处理类与结构体的区别

1、在C#中结构体类型定义时,成员是不能初始化的,这样就导致了,定义结构体变量时,变量的所有成员都要自己赋值初始化。但对于类,在定义类时,就可以初始化其中的成员变量,所以在定义对象时,对象本身就已经有...
  • Kaitiren
  • Kaitiren
  • 2015年01月07日 15:13
  • 2629

C++ 标识符(msdn)

标识符是用于表示以下内容之一的字符序列: 对象或变量名称 类、结构或联合名称 枚举类型名称 类、结构、联合或枚举的成员 函数或类成员函数 ...
  • a576699534
  • a576699534
  • 2015年01月13日 20:57
  • 428

ios学习之旅------玩转结构体

1.全局变量和局部变量 局部变量:     概念:定义函数内部变量     定义格式:变量类型 变量名称;     作用域:从定义那一行开始到所在代码块结束     生命周期:从代码执行到定...
  • sdzh2012
  • sdzh2012
  • 2015年08月20日 09:34
  • 3216

结构体和类的区别

结构体和类的区别:     在做一个项目时,使用了较多的结构体,并且存在一些结构体的嵌套,即某结构体成员集合包含另一个结构体等,总是出现一些奇怪的错误,才终于下决心好好分析一下到底类和结构体有啥不同...
  • u013341034
  • u013341034
  • 2016年03月14日 11:34
  • 2603

List 结构体操作

整理音乐 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 请用链表完成下面题目要求。 xiaobai 很喜欢音乐,几年来...
  • qq_16255321
  • qq_16255321
  • 2014年07月21日 10:18
  • 2097
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MSDN中的结构体部分
举报原因:
原因补充:

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