注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

融智技术学院

融智技术学院163分站,为广大好友提供更多的帮助

 
 
 

日志

 
 

IT百科——结构(struct)  

2014-03-17 15:15:05|  分类: IT百科 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

结构(struct)

C语言中一个结构是一个声明,来定义一系列在内存中的一块儿变量到一个名字下,而且允许不同的变量被访问仅仅通过一个指针。

最好的描述结构的方式是通过示例:

  • struct Point {
  •    int x;
  •    int y;
  • };

声明一个名字为“Point”的结构,表明这个结构包含两方面的信息。第一个信息是一个被称为“x”的整型数,第二个信息是一个被称为“y”的整型数。一个结构是一个单一对象,而且这个结构的所有成员被做为一个单元对待。一个指向“Point”结构的指针将指向第一个整型数“x,紧跟在“x”后的是第二个整型数“y.

一个结构一旦被声明,变量可以通过它来声明:

  • struct Point vPoint;

声明一个被称为“vPoint”的变量,它是一个“Point”类型的。“vPoint.x”访问结构的整型成员“x”,而“vPoint.y”访问结构的整型成员“y”。它类似于声明一个下面的结构:

  • typedef struct Point {
  •    int x;
  •    int y;
  • } Point;

所以“Point”也被用作“struct Point”一样,就像下面这样:

  • Point vPoint;

C语言中声明一个结构的普通语法是:

  • struct tag_name {
  •    type member1;
  •    type member2;
  •    /* declare as many members as desired, but the entire structure size must be known to the compiler. */
  • };

这里tag_name在上下文中是可选的。这样一个结构声明也许出现在一个类型别名的声明或者声明或者变量的定义,但是这样的实体最好分开声明就像是:

  • typedef struct tag_name struct_alias;
  • struct tag_name struct_instance_1;
  • struct_alias struct_instance_2;

一个结构的声明由一系列字段组成,每个字段可以是几乎任意的对象类型。一个结构对象要求的全部存储大小是所有字段要求大小的总和,再加上一些内部的填充。

这有3中方式初始化一个结构。对于结构类型

  • /* Forward declare a type "point" to be a struct. */
  • typedef struct point point;
  • /* Declare the struct with integer members x, y */
  • struct point {
  •    int    x;
  •    int    y;
  • };

C89-样式初始化被用于当连续的成员被给出的时候。

  • /* Define a variable p of type point, and initialize its first two members in place */
  • point p = {1,2};

对于没有连续的或者无序的成员列表,指定初始化方式被使用

  • /* Define a variable p of type point, and set members using designated  initializers*/
  • point p = {.y = 2, .x = 1};

如果一个初始化被给出或者如果对象是静态分配的,省略的成员被初始化为0

一个第三种方式初始化一个结构是拷贝一个已经存在的相同类型对象的值

  • /* Define a variable q of type point, and set members to the same values as those of p */
  • point q = p;

下面一个结构赋值给另一个结构做了一些可预期的事。使用memcpy()并不是不需的来使得一个结构类型重复。内存空间已经被给出而且被置0通过声明这种类型的变量而不为成员初始化。这个不该迷惑于内存管理的要求,当处理一个指向结构的指针时。

  • #include <stdio.h>
  •  
  • /* Define a type point to be a struct with integer members x, y */
  • typedef struct {
  •    int    x;
  •    int    y;
  • } point;
  •  
  • int main(void) {
  •  
  • /* Define a variable p of type point, and initialize all its members inline! */
  •     point p = {1,3};
  •  
  • /* Define a variable q of type point. Members are uninitialized. */
  •     point q;
  •  
  • /* Assign the value of p to q, copies the member values from p into q. */
  •     q = p;
  •  
  • /* Change the member x of q to have the value of 3 */
  •     q.x = 3;
  •  
  • /* Demonstrate we have a copy and that they are now different. */
  •     if (p.x != q.x) printf("The members are not equal! %d != %d", p.x, q.x);
  •  
  •     return 0;
  • }
  评论这张
 
阅读(9)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017