您的位置:首页 > 编程语言 > C语言/C++

结构体与共用体02 - 零基础入门学习C语言54

2011-03-16 20:19 776 查看

第十章:结构体与共用体02

让编程改变世界

Change the world by program

结构体变量的初始化

我们可以这么对结构体进行初始化!

例子01:

[codesyntax lang="c"]
#include <stdio.h>

void main()
{
struct student    /*定义结构*/
{
int num;
char *name;
char sex;
float score;
}boy1, boy2 = { 102, "Jane", 'M', 98.5 };

boy1 = boy2;

printf("Number = %dnName = %snScore = %dn", boy1.num, boy1.name, boy1.score);
printf("nn");
printf("Number = %dnName = %snScore = %dn", boy2.num, boy2.name, boy2.score);

}

[/codesyntax]

结构体数组

一个结构体变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。

如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。

结构体数组与以前介绍过的数值型数组不同之处在于每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员(分量)项。

实例学习:通讯录.exe (点击下载)

定义结构体数组

和定义结构体变量的方法相仿,只需说明其为数组即可。例如:

[codesyntax lang="c"]
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};

struct student student[3];

[/codesyntax]

也可以这样:

[codesyntax lang="c"]
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student[3];

[/codesyntax]

与其他类型的数组一样,对结构体数组可以初始化。

例如:

[codesyntax lang="c"]
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu[2] = {{101,″LiLin″,′M′,18,87.5,″Beijing″},	{102,″Zhang″,′F′,19,99,″Shanghai″}};

[/codesyntax]

当然,数组的初始化也可以用以下形式:

[codesyntax lang="c"]
struct student
{
int num;
};

struct student str[]{{…},{…},{…}};

[/codesyntax]

即先声明结构体类型,然后定义数组为该结构体类型,在定义数组时初始化。

结构体数组应用实例

例题:对候选人得票的统计程序。设有3个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。

演示及作业:投票系统.exe  (点击下载)

指向结构体类型数据的指针

一个结构体变量的指针就是该结构体变量所占据的内存段的起始地址。

可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。(指针伟大吧,指啥都行~)

指针变量也可以用来指向结构体数组中的元素。

结构指针变量说明的一般形式为:
struct 结构名 *结构指针变量名

例如,在前面的例题中定义了stu这个结构,如要说明一个指向stu的指针变量pstu,可写为:
struct stu *pstu;

当然也可在定义stu结构时同时说明pstu。与前面讨论的各类指针变量相同,结构指针变量也必须要先赋值后才能使用。

赋值是把结构变量的首地址赋予该指针变量,不能把结构名赋予该指针变量。

如果boy是被说明为stu类型的结构变量,则:
pstu=&boy

是正确的。
pstu=&stu

是错误的。

但是为什么呢?

因为,结构名和结构变量是两个不同的概念,不能混淆。结构名只能表示一个结构形式,编译系统并不对它分配内存空间。

只有当某变量被说明为这种类型的结构时,才对该变量分配存储空间。

因此上面&stu这种写法是错误的,不可能去取一个结构名的首地址。有了结构指针变量,就能更方便地访问结构变量的各个成员。

其访问的一般形式为:
(*结构指针变量).成员名

或为:
结构指针变量->成员名

例如:
(*pstu).num

或者:
pstu->num

下面通过一个简单例子来说明指向结构体变量的指针变量的应用。

[codesyntax lang="c"]
#include <stdio.h>

struct stu
{
int num;
char *name;
char sex;
float score;
} boy1 = {102, "Fishc", 'M', 78.5};

void main()
{
struct stu *pstu;
pstu = &boy1;

printf("Number = %dnName = %sn", boy1.num, boy1.name);
printf("Sex = %cnScore = %fnn", boy1.sex, boy1.score);

printf("Number = %dnName = %sn", (*pstu).num, (*pstu).name);
printf("Sex = %cnScore = %fnn", (*pstu).sex, (*pstu).score);

printf("Number = %dnName = %sn", pstu->num, pstu->name);
printf("Sex = %cnScore = %fnn", pstu->sex, pstu->score);
}

[/codesyntax]

[buy] 获得所有教学视频、课件、源代码等资源打包 [/buy]
[Downlink href='http://kuai.xunlei.com/d/LIGVBATSNYTO']视频下载[/Downlink]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: