C语言结构体与共用体1.0

本文详细介绍了C语言中的结构体和共用体,包括结构体类型的定义、结构体变量的声明与引用、结构体变量的赋值与初始化、结构体数组的创建、指向结构体的指针以及如何通过指针访问结构体成员。示例代码展示了如何操作结构体变量,以及如何创建和显示朋友通讯录。

1.1结构体类型:
不是C语言提供的标准类型。必须先定义结构体类型,再使用。
一般形式:
struct 结构体类型名
{
数据类型 成员名1;
数据类型 成员名2;



数据类型 成员名n;
}
eg:
struct person
{
char name[10];
char sex;
int age;
int stature;
};

struct data
{
int year;
int month;
int day;
};
struct student
{
int no;
char name[10];
char sex;
struct data birthday;
};

注意:struct是c语言关键字不能省略;结构体类型名为用户自己定义标识符;
同一结构体中不同的成员不能使用相同的名字,但不同结构体可以定义相同的名字;
花括号后面有“;”不能省略;结构体类型可以使用除基本类型之外的其他类型;
结构体可以嵌套定义,即结构体的成员可以是另外一个结构体类型。

1.2结构体变量的定义:
方法一:先定义结构体类型,再说明结构体变量:
struct stud
{
int num;
char name[10];
float score;
}
struct stud stu1,stu2;
注意:定义结构体变量之后,系统就会为之分配内存单元。结构体内存所占有的字节数等于其各个成员所占的字节数之和。
方法二:在定义结构体类型的同时说明结构体变量。
struct stud
{
int num;
char name[10];
float score;
}stu1,stu2;
方法三:直接说明结构体变量
struct
{
int num;
char name[10];
float score;
}stu1,stu2;
1.3结构体变量的引用
结构体变量中成员的引用形式:
结构变量名.成员名 如:stu1.score
注意:若成员本身有是一个结构类型,则必须逐级找到最低级的成员才能使用。结构体变量的成员和普通变量一样也可以进行各种运算,具体情况由成员的数据类型决定。
1.4结构体变量的赋值和初始化
可以用输入输出函数来实现:
scanf("%d",&stu1.num);
stu1.score=85;
注意:不能对结构体变量进行整体赋值。
以下两种赋值方式为错误的:
stu={6466,“丽萍”,86};
scanf("%d,%s,%f",&stu1);
结构体变量初始化:在定义结构体变量同时,给它的各个成员赋初值,初始化的格式为:
struct 结构体类型名
{
结构体成员列表;
}结构体变量名={初始数据表};
struct student
{
int num;
char name[10];
int age;
char sex;
}a={908,“王军”,19,‘m’};
1.5结构体数组:
struct 结构体类型名 数组名[元素个数];
struct student a[10];
定义同时赋初值:
struct student s[3]={{6,“dfdd”,68,‘q’},{68,“lin”,34,‘F’},{78,“bo”,89,‘N’}};
例:
struct stu
{
int num;
char name[15];
char sex;
int score;
} s[3]={{1101,“LIPING”,‘M’,90},{1202,“ZHANGWANG”,‘M’,80},{1123,“HEME”,‘F’,92}};
void main()
{
int i,count=0;
float ave,sum=0;
for(i=0;i<3;i++)
{
sum+=s[i].score;
if(s[i].score<60)
count++;
}
ave=sum/3;
printf("%f,%d",ave,count);
}
建立朋友通讯录:
#include<stdio.h>
struct friend
{
char name[20];
char phone[10];
};
void main()
{
struct friend f[30];
int i;
for(i=0;i<30;i++)
{
printf(“input name:\n”);
gets(f[i].name);
printf(“input phone:\n”);
gets[f[i].phone];
}
printf(“name\t\t\tphone\n\n”);
for(i=0;i<30;i++)
printf("%s\t\t\t%s\n",f[i].name,f[i].phone);
}
1.6指向结构体类型数据的指针:
结构体成员除了一般类型和其他结构体类型外,还可以是指针类型,特别是指向自己类型的指针。
struct s
{
int data;
struct s *pnext;
}
/这种结构一般用于构造链表/
1.7结构体指针变量的定义
struct 结构体名 *指针变量名:
struct student *p1,*p2;
当一个结构体指针变量定义好之后,就可以用来指向结构体变量 及结构体数组中的元素.
struct student s[4],a;
struct student *p1,*p2;
p1=&a;
p2=s;
利用结构体指针变量引用结构体成员
(1)利用指针运算符“**”先得到所指对象,再使用分量运算"."实现
如:(*p1).name
(2)用指向运算法“->”直接引用所指向结构体变量的成员:
如:p1->name===(*p1).name
(3)结构体变量名.成员名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值