Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29335441
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: C/C++

2010-03-10 23:10:36

C语言结构体学习

[整理人:遥方 整理时间:2010-2-26]

结构体(struct)C语言重应用比较多的一种数据结构,它可以有效的各种数据(包括各种不同类型的数据)整合在一个数据体中.

PS:其实这个就像面向对象里面的一个对象包含过来的各种属性

首先考察结构体的大小(size)
struct a
{
 unsigned char code;
 unsigned int  student;
};
如果按照各个数据的各自的大小进行累加,结构体asize应该是:sizeof(char)+sizeof(int)=5;
而实际上,以上程序的运行结果为:the size of struct a is 8
为什么会出现这样的情况?

这是因为在32位的操作系统上,操作系统组织数据是以32(4个字节)作为一个标准,因此各种变量的size都一般都是4的倍数。而且结构体数据都是按照定义时所使用的顺序存放的,因此尽管code变量只会占有一个字节,但是code+student=5>4,因此第一个4位字节存放code,第二个4位字节用于存放student,这样实际上就浪费了3个字节。

 

PS:操作系统的位数会影响到我们的变量所占的内存空间数。

 

一、结构类型学习

定义一个结构的一般形式为:
struct
结构名
{
成员表列
};

成员表由若干个成员组成, 每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:
类型说明符 成员名;

示例:

struct stu

         {

                   int num;

                   char name[20];

                   char sex;

                   float score;

         }

这里面我们只是定义了一种新的数据类型为结构体类型。现在可以把它想像成是一个int类型。就可以拿它去定义其他的变量了

struct stu boy1,boy2;                    表示定义了两个变量值

还可以在定义结构类型的时候直接声明变量

 

 

struct stu
{
int num;
char name[20];
char sex;
float score;
}boy1,boy2;

 

还可以如下定义

struct date{
int month;
int day;
int year;
}                         
表示先定义一个结构类型的变量(新的变量类型)
struct{                 
并没有定义结构体的名字哦!
int num;
char name[20];
char sex;
struct date birthday;             
引用此结构体变量进来
float score;
}boy1,boy2;

 

结构变量的初始化

如果结构变量是全局变量或为静态变量, 则可对它作初始化赋值。对局部或自动结构变量不能作初始化赋值。

struct stu /*定义结构*/
{
int num;
char *name;
char sex;
float score;
} boy2,boy1={102,"Zhang ping",'M',78.5};
main()
{
boy2=boy1;
printf("Number=%d\nName=%s\n",boy2.num,boy2.name);
printf("Sex=%c\nScore=%f\n",boy2.sex,boy2.score);
}

 

 

阅读(1086) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~