C语言 结构体

目录

结构体定义

结构体类型的声明

1.先声明结构体类型再定义变量名

2.定义结构体类型的同时定义变量

3.直接调用结构体类型变量

结构体变量的引用

结构体变量的赋值

1.定义结构体变量是赋值——初始化

2.使用赋值语句为结构体变量整体赋值

结构体数组

1.结构体数组的定义

2.结构体数组的初始化

 3.结构体数组的引用


结构体定义

结构体是一种构造类型数据,结构体由若干不同类型的数据项组成,构成结构体的各个数据项称为结构体成员

结构体类型的声明

struct  结构体名

{

   数据类型   成员名 1;

   数据类型   成员名 2;

   数据类型   成员名 3;

   ......

   数据类型   成员名 n;

  };

struct  date {int year,month,day;};

struct  student

      int  num;

       char name[20];

      char sex;

      int  age;

      float score;

      char addr[30];

       struct date birthday;

      }

注:

结构体类型是没有存储空间的

结构体类型定义后,如int /float 类型一样,仅仅是类型,是没有存储空间的。如果想要存放信息,需要定义该结构体类型的变量

结构体成员可以是结构体类型

C语言中结构体成员的数据类型可以是简单类型、数组、指针或已说明过的结构体,结构体可以多层嵌套,并且允许内嵌结构体成员的名字可以与外层成员名字相同,如定义了日期类型,则可以在学生结构体类型成员中增加结构体类型birthday

1.先声明结构体类型再定义变量名

与定义为基本类型不同之处在于结构体类型不仅要指定变量为结构体类型,而且要指定为某一特定的结构体类型

2.定义结构体类型的同时定义变量

也就是在定义结构体类型时后花括号{}后面直接定义上该结构体类型变量的名字

3.直接调用结构体类型变量

第3种和第2种的区别在于没有给结构体类型命名,也就是structural后面没有结构体类型名

在此定义的无类型名

问题:结构体变量占多少个字节?

不同的结构体类型所含成员不同,因此没有固定的长度。结构体变量所占内存长度是各成员所占的内存长度之和,每个成员分别占用自己的内存单元

结构体变量的引用

形式:结构体变量名.成员名

注:不能将结构体变量作为一个整体进行输入输出

成员本身如果是结构体类型,只能对最低级的成员进行赋值等引用和运算

结构体成员和普通变量一样,可进行各种运算,其中" . "优先级最高,可以引用结构体变量成员的地址,也可以引用结构体变量的地址

结构体变量的地址主要作用用于函数传参,传递结构体变量的地址

例:scanf("%d",&student1.num);

printf("%o",&student1);

但是不能用以下语句整体读入结构体变量

如:scanf("%d,%s,%c,%d,%f",&student1);

结构体变量的赋值

1.定义结构体变量是赋值——初始化

在对结构体变量初始化时需要按照成员表的顺序依次赋初值,各个成员间用逗号隔开。

2.使用赋值语句为结构体变量整体赋值

结构体成员的赋值

(1)使用赋值语句为成员赋值

student.num=101;

(2)使用输入语句为成员赋值

scanf("%s",student1.name);

例:对结构体变量初始化并输出

#include <stdio.h>
struct student//结构体类型声明
{
	long num;
	char name[20];
	char sex;
	float score;
 } ;
 int main()
 {
 	/*声明结构体变量a并赋初值*/
 	struct student a={1011,"ZhangSan",'N',90};
 	/*输出结构体变量a的各项成员值*/
 	printf(" No:%Id\n name:%s\n sex:%c\n score:%f\n",a.num,a.name ,a.sex,a.score);
 }

实验结果如下:

注:结构体变量之间除了允许相互赋值外,不允许对结构体变量进行整体操作(输入、输出或运算等),只能对其成员进行操作。

结构体数组

1.结构体数组的定义

(1)先声明结构体类型再定义结构体数组

        例:struct student stu[3];

(2)定义结构体类型的同时定义结构体数组

(3)直接定义数据类型数组

2.结构体数组的初始化

一般形式:在定义数组的后面加“={初值列表};”

例:

 struct student

{

    ...

} stu[3]={  {...},{...},{...} }; 

 3.结构体数组的引用

引用形式:

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

例:stu[0].age=20

例:候选人得票统计程序 

#include <stdio.h>
#include <string.h>
struct person
{
	char name[20];
	int count;
}leader[3]={" Zhou ",0," Wu ",0," Zheng ",0};
main(){
	int i,j;
	char leader_name[20];
	for(i=1;i<=10;i++)
	{
		scanf("%s",leader_name);
		for(j=0;j<3;j++)
		if(strcmp(leader_name,leader[j].name)==0)
		leader[j].count++;
	}
	printf("\n");
	for(i=0;i<3;i++)
	printf("%5s:%d\n",leader[i].name,leader[i].count);
	
}

实验结果如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值