全部博文(2065)
分类: C/C++
2010-03-10 23:10:36
C语言结构体学习
[整理人:遥方 整理时间:
结构体(struct)是C语言重应用比较多的一种数据结构,它可以有效的各种数据(包括各种不同类型的数据)整合在一个数据体中.
PS:其实这个就像面向对象里面的一个对象包含过来的各种属性
首先考察结构体的大小(size):
struct a
{
unsigned char code;
unsigned int student;
};
如果按照各个数据的各自的大小进行累加,结构体a的size应该是: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);
}