C语言学习教程第七章-结构与联合(2)

在ANSI C中除了允许具有相同类型的结构变量相互赋值以外, 一般对结构变量的使用,包括赋值、输入、输出、 运算等都是通过结构变量的成员来实现的。

表示结构变量成员的一般形式是: 结构变量名.成员名 例如:boy1.num 即第一个人的学号 boy2.sex 即第二个人的性别 如果成员本身又是一个结构则必须逐级找到最低级的成员才能使用。例如:boy1.birthday.month 即第一个人出生的月份成员可以在程序中单独使用,与普通变量完全相同。

结构变量的赋值

前面已经介绍,结构变量的赋值就是给各成员赋值。 可用输入语句或赋值语句来完成。
[例7.1]给结构变量赋值并输出其值。
main(){
struct stu
{
int num;
char *name;
char sex;
float score;
} boy1,boy2;
boy1.num=102;
boy1.name="Zhang ping";
printf("input sex and score\n");
scanf("%c %f",&boy1.sex,&boy1.score);
boy2=boy1;
printf("Number=%d\nName=%s\n",boy2.num,boy2.name);
printf("Sex=%c\nScore=%f\n",boy2.sex,boy2.score);
}

本程序中用赋值语句给num和name两个成员赋值,name是一个字符串指针变量。用scanf函数动态地输入sex和score成员值,然后把boy1的所有成员的值整体赋予boy2。最后分别输出boy2 的各个成员值。本例表示了结构变量的赋值、输入和输出的方法。

结构变量的初始化
如果结构变量是全局变量或为静态变量, 则可对它作初始化赋值。对局部或自动结构变量不能作初始化赋值。
[例7.2]外部结构变量初始化。
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);
}
struct stu
{
int num;
char *name;
char sex;
float score;
}boy2,boy1={102,"Zhang ping",'M',78.5};
main()
{
boy2=boy1;
……
}
本例中,boy2,boy1均被定义为外部结构变量,并对boy1作了初始化赋值。在main函数中,把boy1的值整体赋予boy2, 然后用两个printf语句输出boy2各成员的值。
[例7.3]静态结构变量初始化。
main()
{
static struct stu /*定义静态结构变量*/
{
int num;
char *name;
char sex;
float score;
}boy2,boy1={102,"Zhang ping",'M',78.5};
boy2=boy1;
printf("Number=%d\nName=%s\n",boy2.num,boy2.name);
printf("Sex=%c\nScore=%f\n",boy2.sex,boy2.score);
}
static struct stu
{
int num;
char *name;
char sex;
float score;
}boy2,boy1={102,"Zhang ping",'M',78.5};
本例是把boy1,boy2都定义为静态局部的结构变量, 同样可以作初始化赋值。

时间: 2024-10-28 11:23:30

C语言学习教程第七章-结构与联合(2)的相关文章

C语言学习教程第七章-结构与联合(8)

一.联合的定义 定义一个联合类型的一般形式为: union 联合名 { 成员表 };成员表中含有若干成员,成员的一般形式为: 类型说明符 成员名 成员名的命名应符合标识符的规定.例如: union perdata{int class;char office[10];};定义了一个名为perdata的联合类型,它含有两个成员,一个为整型,成员名为class:另一个为字符数组,数组名为office.联合定义之后,即可进行联合变量说明,被说明为perdata类型的变量,可以存放整型量class或存放字

C语言学习教程第七章-结构与联合(5)

topoic=动态存储分配 在数组一章中,曾介绍过数组的长度是预先定义好的, 在整个程序中固定不变.C语言中不允许动态数组类型.例如: int n;scanf("%d",&n);int a[n]; 用变量表示长度,想对数组的大小作动态说明, 这是错误的.但是在实际的编程中,往往会发生这种情况, 即所需的内存空间取决于实际输入的数据,而无法预先确定.对于这种问题, 用数组的办法很难解决.为了解决上述问题,C语言提供了一些内存管理函数,这些内存管理函数可以按需要动态地分配内存空间,

C语言学习教程第七章-结构与联合(7)

[例7.14]将以上建立链表,删除结点,插入结点的函数组织在一起,再建一个输出全部结点的函数,然后用main函数调用它们.#define NULL 0#define TYPE struct stu#define LEN sizeof(struct stu)struct stu{int num;int age;struct stu *next;};TYPE * creat(int n){struct stu *head,*pf,*pb;int i;for(i=0;i<n;i++){pb=(TYPE

C语言学习教程第七章-结构与联合(1)

结构类型定义和结构变量说明 在实际问题中,一组数据往往具有不同的数据类型.例如, 在学生登记表中,姓名应为字符型:学号可为整型或字符型: 年龄应为整型:性别应为字符型:成绩可为整型或实型. 显然不能用一个数组来存放这一组数据. 因为数组中各元素的类型和长度都必须一致,以便于编译系统处理.为了解决这个问题,C语言中给出了另一种构造数据类型--"结构". 它相当于其它高级语言中的记录. "结构"是一种构造类型,它是由若干"成员"组成的. 每一个成员可

C语言学习教程第七章-结构与联合(6)

creat函数用于建立一个有n个结点的链表,它是一个指针函数,它返回的指针指向stu结构.在creat函数内定义了三个stu结构的指针变量.head为头指针,pf 为指向两相邻结点的前一结点的指针变量.pb为后一结点的指针变量.在for语句内,用malloc函数建立长度与stu长度相等的空间作为一结点,首地址赋予pb.然后输入结点数据.如果当前结点为第一结点(i==0),则把pb值 (该结点指针)赋予head和pf.如非第一结点,则把pb值赋予pf 所指结点的指针域成员next.而pb所指结点为

C语言学习教程第七章-结构与联合(4)

这三种用于表示结构成员的形式是完全等效的.结构数组指针变量结构指针变量可以指向一个结构数组, 这时结构指针变量的值是整个结构数组的首地址. 结构指针变量也可指向结构数组的一个元素,这时结构指针变量的值是该结构数组元素的首地址.设ps为指向结构数组的指针变量,则ps也指向该结构数组的0号元素,ps+1指向1号元素,ps+i则指向i号元素. 这与普通数组的情况是一致的.[例7.7]用指针变量输出结构数组.struct stu{int num;char *name;char sex;float sco

C语言学习教程第七章-结构与联合(3)

结构数组 数组的元素也可以是结构类型的. 因此可以构成结构型数组.结构数组的每一个元素都是具有相同结构类型的下标结构变量. 在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体.如一个班的学生档案,一个车间职工的工资表等. 结构数组的定义方法和结构变量相似,只需说明它为数组类型即可.例如: struct stu{int num;char *name;char sex;float score;}boy[5]; 定义了一个结构数组boy1,共有5个元素,boy[0]-boy[4].每个数组元

C语言学习教程第三章-C语言程序设计初步(1)

C语言程序设计 本课介绍C语言程序设计的基本方法和基本的程序语句.从程序流程的角度来看,程序可以分为三种基本结构, 即顺序结构.分支结构.循环结构. 这三种基本结构可以组成所有的各种复杂程序.C语言提供了多种语句来实现这些程序结构. 本章介绍这些基本语句及其应用,使读者对C程序有一个初步的认识, 为后面各章的学习打下基础. C程序的语句 C程序的执行部分是由语句组成的. 程序的功能也是由执行语句实现的.C语句可分为以下五类:1.表达式语句2.函数调用语句3.控制语句4.复合语句5.空语句 1.表

C语言学习教程第四章-数组(1)

数 组 数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来.这些按序排列的同类数据元素的集合称为数组.在C语言中, 数组属于构造数据类型.一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型.因此按数组元素的类型不同,数组又可分为数值数组.字符数组.指针数组.结构数组等各种类别. 本章介绍数值数组和字符数组,其余的在以后各章陆续介绍.数组类型说明 在C语言中使用数组必须先进行类型说明. 数组说明的一般形式为: 类型说明符 数组名 [常量表达式],