结构体知识汇总

一、结构体

1、定义:本质就是自定义的数据类型,struct+结构体名称,理解成一张图纸即可;

2、形式:

struct  结构体名称

{

        数据类型    成员名称

};

即 struct 结构体名称 变量名;

3、访问形式:

结构体变量  .   成员名称:表示结构体变量中的某个成员;

4、结构体名称可以省略,但是只能定义结构体的时候定义变量;

5、结构体赋值的三种方法:

1、初始化;

2、赋值;

3、键入;

e.g.

#include <stdio.h>
#include <string.h>
struct student       //定义结构体:  本质就是自定义一种数据类型, 类型的名称:  struct student
{
	int num;
	char name[32];
	double score;
};
int main01()
{
	struct student s = {1001, "xiaoqi", 90.89}; //定义一个结构体变量     初始化!!!!
	printf("%d\t%s\t%.2lf\n", s.num, s.name, s.score);
	return 0;
}

int main02()
{
	struct student s;
	s.num = 2222;
	strcpy(s.name ,"xiaoqi");                                         //赋值!!!!
	s.score = 100;
	printf("%d\t%s\t%.2lf\n", s.num, s.name, s.score);
	return  0;
}

int main()
{
	struct student s;
	printf("请输入学号:");
	scanf("%d", &s.num);
	while(getchar()!='\n');
	printf("请输入姓名:");
	scanf("%s", s.name);
	while(getchar()!='\n');
	printf("请输入成绩:");
	scanf("%lf", &s.score);
	while(getchar()!='\n');
	printf("%d\t%s\t%.2lf\n", s.num, s.name, s.score);               //键盘输入!!!!
	return 0;
}

二、结构体指针

1、结构体指针变量
struct  student  *p ;
2、->:  
结构体指针变量->成员名称   :表示指针指向的结构体变量的某个成员
3、如何通过指针访问结构体变量成员:
  (1)(*指针变量).成员名称
   (2) 指针变量->成员名称

#include <stdio.h>
struct student
{
	int num;
	char name[32];
	double score;
};
int main()
{
	struct student s = {1001, "zhangsan", 90.89};
	struct student *p = &s;
	// *p 等价于  s               s.num     s.name     s.score
	//printf("%d\t%s\t%.2lf\n", (*p).num, (*p).name, (*p).score);
	// p->num: 表示指针指向的结构体变量num这个成员
	printf("%d\t%s\t%.2lf\n", p->num, p->name, p->score);
	return 0;
}

三、指针操作数组每一个元素的方式

1、指针自增:p++   p->成员名称;

#include <stdio.h>
struct student
{
	int num;
	char name[32];
	double score;
};
	struct student s[5] = {{1001, "zhangsan", 90},{1002, "lisi", 89},{1003, "wangwu", 99},{1004, "xxxx", 78},{1005, "yyyy", 88}};
	struct  student *p = s;
	while(p < s+5)
	{
		printf("%d\t%s\t%.2lf\n", p->num, p->name, p->score);
		p ++;
	}
	return 0;
}

2、指针加上下标的方式: p[i]   p[i].成员名称 ;

#include <stdio.h>
struct student
{
	int num;
	char name[32];
	double score;
};
int main()
{
	struct student s[5] = {{1001, "zhangsan", 90},{1002, "lisi", 89},{1003, "wangwu", 99},{1004, "xxxx", 78},{1005, "yyyy", 88}};
	struct  student *p = s;
	for(int i=0; i<5; i++)
	{
		printf("%d\t%s\t%.2lf\n", p[i].num, p[i].name, p[i].score);
		printf("%d\t%s\t%.2lf\n", (p+i)->num, (p+i)->name, (p+i)->score);
		printf("%d\t%s\t%.2lf\n", (*(p+i)).num, (*(p+i)).name, (*(p+i)).score);
	}
	return 0;
}

3、数组名加上下标的方式:p+i  (*(p+i)).成员名称   (p+i)->成员名称

#include <stdio.h>
struct student
{
	int num;
	char name[32];
	double score;
};
int main()
{
	struct student s[5] = {{1001, "zhangsan", 90},{1002, "lisi", 89},{1003, "wangwu", 99},{1004, "xxxx", 78},{1005, "yyyy", 88}};
	for(int i=0; i<5; i++)
	{
		printf("%d\t%s\t%.2lf\n", s[i].num, s[i].name, s[i].score);
		printf("%d\t%s\t%.2lf\n", (s+i)->num, (s+i)->name, (s+i)->score);
	}
	return 0;
}

四、嵌套结构体

1、 定义结构体时, 结构体中的类型应该都是已经存在的类型
2、 如果嵌套结构体,那么该结构体在之前要已经定义过
3、 每一个结构体变量只能访问自己的成员,如果有嵌套结构体成员,要一级一级访问

#include <stdio.h>
struct date
{
	int year;
	int month;
	int day;
};
struct student
{
	int num;
	char name[32];
	struct date  bir;
};
int main()
{
	struct student s = {1001, "zhangsan", {2020,10,1}};
	printf("%d\t%s\t%d-%d-%d\n", s.num, s.name, s.bir.year, \        //初始化!!!!
			s.bir.month, s.bir.day);
	return 0;
}
int main()
{
	struct student s;
	printf("请输入学号:");
	scanf("%d", &s.num);
	while(getchar()!='\n');
	printf("请输入姓名:");
	scanf("%s", s.name);
	while(getchar()!='\n');
	printf("请输入出生日期(2020/10/1):");
	scanf("%d/%d/%d", &s.bir.year, &s.bir.month, &s.bir.day);      //键盘输入!!!!
	while(getchar()!='\n');
	printf("%d\t%s\t%d-%d-%d\n", s.num, s.name, s.bir.year, \
			s.bir.month, s.bir.day);
	return 0;
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值