C语言学习笔记之结构体与共用体

2022-07-26 13:39:37

结构体

结构体:将不同类型的数据组合成一个有机的整体,以便引用;结构体中的元素也可以为结构体类型的

for exmple :

num     name        sex        age        score        addr

10010    LiFei        M            18        87.5            Beijing

声明一个结构体变量的形式 :

struct    结构体名称

{成员列表};

结构体元素的输出:

 结构体变量名.成员名

结构体初始化:

#include <stdio.h>
int main()
{	
	struct student {long int num;char name[20];char sex;char addr[20];}
	a={980310,"lilin",'M',"123Road"};
	printf("%d\n%s\n",a.num,a.name);
	return 0;
}

输出结果;


结构体数组的定义:

sturct student

{int num;char}

#include <stdio.h>
int main()
{	
	struct student {long int num;char name[20];char sex;char addr[20];};
	struct student stu[3];	
}

#include <stdio.h>
#include <string.h>
struct person {char name[20];int count;};struct person leader[3]={{"Li",0},{"zhang",0},{"Fun",0}};//另一种结构体的定义形式
//等价于 struct person {char name[20];int count;} leader[3]={{"Li",0},{"zhang",0},{"Fun",0}};
int main()
{	
	int i,j;
	char leader_name;
	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("%s:%d\n",leader[i].name,leader[i].count);
		}
	return 0;
}

结构体指针变量

#include <stdio.h>
#include <string.h>
int main()
{	
	struct student {long num;char name[20];char sex;float score;};
	struct student stu_1;
	struct student *p;//定义指向结构体的指针变量
	p=&stu_1;
	stu_1.num=888888;
	strcpy(stu_1.name,"Li lin");//字符串赋值只能用strcpy,不能用=
	stu_1.sex='	M';//这个可以直接用=赋值
	stu_1.score=99;
	printf("%d\n%s\n%c\n%f",(*p).num,(*p).name,(*p).sex,(*p).score);
	return 0;
}

共用体

共用体定义:

                    使不同的数据类型的变量存放在同一段内存单元中,相互覆盖,使几个不同的变量公占同一段内存的结构,但是都从同一个地址开始存放的。如定义了一个共用体a,他的地址和他的各个成员地址都是同一地址。&a,&a.f,&a.c ,&a.i 都是同一地址

它与结构体根本不同是在内存中的存入方式不同。结构体变量所占内存长度是各成员占的内存长度之和,共用体变量占的内存长度等于最长的成员长度。


#include <stdio.h>
#include <string.h>
struct {int num;char name[10];char sex;char job;union {int class;char position[10];}category;}person;
int main()
{	
	int n,i;
	for(i=0;i<2;i++)
		{
			scanf("%d %s %c %c",&person[i].num,&person[i].name,&person[i].sex,&person[i].job);
			if (person[i].job=='s')  scanf("%d",&person[i].category.class);
			else if(person[i].job=='t')	scanf("%d",&person[i].category.position);
			else printf("error input!!\n");		
		}
	printf("The following is the content of information\n");
	printf("No	Name	sex	job	class/position\n");
	for (i=0;i<2;i++)
		{if(person[i].job=='s')	printf()	}//后面的懒得写了
	return 0;
}


  • 作者:qq_40121643
  • 原文链接:https://blog.csdn.net/qq_40121643/article/details/79577315
    更新时间:2022-07-26 13:39:37