h第八章 结构和联合

时间:2026-01-19

C语言程序设计教程,笔记

第8章 结构和联合

8.1 结构(structure)

8.1.1 结构类型

由若干个成员(域)组成。

每个成员具有自身的名字和数据类型,

同一结构中的成员名不能相同。

例如, 一个学生的信息,它包括以下5项:

学号、姓名、性别、年龄、成绩 8.1.2 结构类型的定义

一般形式:

struct 结构名

{

类型1 成员名1;

类型2 成员名2;

类型n 成员名n;

};

说明:

(1) 结构定义描述了结构的组织形式,但在编译时并不分配存储空间。(类似于int,char一样的作用)

(2) 结构的成员可以是简单变量、数组、指针、结构等。

struct date /*struct32个关键字之一*/

{ int day; char month[4]; int year; };

struct stud

{ long num;

char name[20];

char sex;

struct date birthday; 嵌套结构stud的逻辑结构

char *addr;

}

;

(3) 结构定义可在函数内部,也可在函数外部。

(4) 定义结构类型时,注意不能遗漏最后的分号。(表示一个类型定义语句)

8.1.3 结构

一、结构变量 变量的声明

三种定义方法

1.在定义结构类型的同时声明变量。例如:

struct student

{ long num;

char name[20];

C语言程序设计教程,笔记

char sex;

int age;

float score; }s1,s2,s3;

2.直接声明结构类型变量

例如:

struct

{

long num;

char name[20];

char sex;

int age;

float score;

} s1,s2,s3;/*(这里不同于前一种方法之处在于struct后面不出现结构名,故不便于在源程序中的其他地方声明新的变量)*/

3.先定义结构类型再声明变量

例如:

struct student

{

long num;

char name[20];

char sex;

int age;

float score;

};

struct student s1,s2,s3;

注意:

(1) 先定义类型再声明变量。

(2) 存储空间分配是按照各成员项的定义顺序进行的。

(3) 每个结构变量存储空间的大小是各成员项所占空间之和。例如:

sizeof( s1 )的值为31;4+20+1+2+4

sizeof( struct student )的值为31;

sizeof( float )的值为4。(sizeof长得像函数但其实是一个单目运算符,运算量可以是简单变量名、数组名、结构变量名、数据类型名等)

(4) 结构变量中的成员可单独使用。

二、结构变量的初始化

struct student

{ long num;

char name[20];

char sex;

int age;

float score;

C语言程序设计教程,笔记

}s1,s2={80101,"Lilin",'M ,18};←对s2进行初始化,没有注出的部分默认为0

三、结构变量的引用

形式:

结构变量名.成员名

.叫做成员运算符,用于访问结构变量的成员,优先级为第一优先级

main( )

{ struct student

{ long num; char name[20]; char sex; int age; float score;

} s1,s2={80101,"Lilin",'M',18};

printf( "%ld\n %s\n %c\n ", s2.num,http://www.77cn.com.cn,s2.sex);

s1=s2; /*结构变量还可以赋值传值*/

printf( "%ld\n %s\n %c\n", s1.num,http://www.77cn.com.cn,s1.sex);

}

×

注意:

(1)不能将一个结构变量作为一个整体进行输入和输出。

例: scanf("%ld%s%c",&s1);

printf("%ld\n %s\n %c\n",s2);

只能对各个成员分别进行输入和输出,如:

s1.num=80101;

strcpy(http://www.77cn.com.cn,"Liling");

(2)结构变量可以进行整体赋值,但不能整体进行比较。

if(s1>s2) printf("%s",http://www.77cn.com.cn); × stu[0]

stu[1]

stu[2]

stu[3]

stu[4] name sex age score (3) 如果成员本身又属一个结构类型,则要逐级地找到最低的一级成员 8.2 结构数组

8.2.1 结构数组的声明 结构数组的逻辑结构

1.定义结构类型后声明结构数组。例如:

struct student

{

long num;

char name[20];

char sex;

int age;

float score;

};

struct student stu[5];

C语言程序设计教程,笔记

2.直接声明一个结构数组

例如:

struct student

{ long num;

char name[20];

char sex;

int age;

float score;

}stu[5];

struct

{ long num;

char name[20];

char sex;

int age;

float score;

}stu[5];

8.2.2 结构数组的初始化

格式:

struct 结构名 结构数组名[元素个数]={初始数据};

struct student stu[3]={{80101, "Lilin", 'M', 18},

{80102,"Wanglan",'F',19},

{80103,"Zhangjun",'F',20}};

8.2.3 结构数组元素的引用

形式:

结构数组名[下标].成员名

例如

printf(“%ld”, stu[0].num);

strcpy(stu[0].name,"Lilin");

8.3 结构指针

8.3.1 指向结构变量的指针

形式: struct 结构名 *结构指针名;

例: struct student *p;

再例: struct student

{ long num;

char name[20];

char sex;

int age;

C语言程序设计教程,笔记

float score;

} s1, *p=&s1;

结构指针名->成员名

设有

struct date

{ int day;

char month[4];

int year;

}birthday,*sp=&birthday;

注意 …… 此处隐藏:3910字,全部文档内容请下载后查看。喜欢就下载吧 ……

h第八章 结构和联合.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:4.9 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:19元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219