C语言第11题:结构体数组的定义与使用 + 结构体数组排序

注意:
一下赋值是不能使用的
在这里插入图片描述
但是在结构体中是可以直接进行赋值操作的
st[1] = st[2];
printf(“姓名 = %s, 年龄 = %d, 班级 = %s, 成绩 = %d\n”,st[1].name,st[1].age,st[1].classes,st[1].score);

结构体使可以进行互相赋值的
struct A a1 = { “hello” };
struct A a2 = {“c”};
a2 = a1;

#include<stdio.h>

struct E
{
	char a1 : 1; //定义一个char类型 位字段实现
	char a2 : 1;
	char a3 : 1;
	char a4 : 1;
	char a5 : 1;
	char a6 : 1;
	char a7 : 1;
	char a8 : 1;
};

struct F
{
	int i : 2;
	char c : 2; // char c : 10;不能超过8bit数据, 
	
};

struct student
{
	char name[16]; //姓名
	unsigned char age; //年龄
	char classes[100]; //班级
	unsigned char score; //分数
};

struct A
{
	char array[10];
};
int main()
{
	printf("%d\n", sizeof(struct F));
	struct student st[5] = { {"周",50,"java",90},{ "翟",25,"C++",97 } ,{ "催",25,"python",92 } };
	int  i;
	for (i = 0; i < 3; i++)
	{
		printf("姓名=%s, 年龄=%d, 班级=%s, 成绩=%d\n", st[i].name, st[i].age, st[i].classes, st[i].score);
	}
	printf("------------------------------------------------");
	printf("\n");
	st[1] = st[2];
	printf("姓名 = %s, 年龄 = %d, 班级 = %s, 成绩 = %d\n", st[1].name, st[1].age, st[1].classes, st[1].score);

	struct A a1 = { "hello" };
	struct A a2 = {"c"};
	a2 = a1;

	system("pause");
	return 0;
}

使用结构体交换数据所在的地址

#include<stdio.h>

struct E
{
	char a1 : 1; //定义一个char类型 位字段实现
	char a2 : 1;
	char a3 : 1;
	char a4 : 1;
	char a5 : 1;
	char a6 : 1;
	char a7 : 1;
	char a8 : 1;
};

struct F
{
	int i : 2;
	char c : 2; // char c : 10;不能超过8bit数据, 
	
};

struct student
{
	char name[16]; //姓名
	unsigned char age; //年龄
	char classes[100]; //班级
	unsigned char score; //分数
};

struct A
{
	char array[10];
};

void swap(struct student *a, struct student *b)
{
	struct student tmp = *a;
	*a = *b;
	*b = tmp;
}

int main()
{
	struct student st[3] = { { "周",50,"java",90 },{ "翟",25,"C++",97 } ,{ "催",25,"python",92 } };

	
	int i;
	int j;
	for (i = 0; i < 3; i++)
	{
		for (j = 1; j < 3 - i; j++)
			{
				if (st[j].age < st[j - 1].age)
				{
					swap(&st[j], &st[j - 1]);
				}
			}
	}
		
	for (i = 0; i < 3; i++)
	{
		printf("姓名=%s, 年龄=%d, 班级=%s, 成绩=%d\n", st[i].name, st[i].age, st[i].classes, st[i].score);
	}
	system("pause");
	return 0;
} 

在这里插入图片描述

在这里插入图片描述
这里补充一个知识点
首先用malloc申请一块地址
char *p = malloc(10);
char *array = p;
p ++;
free§;
这里如果释放的是p,由于p的值是从第二个开始的, 然后往后数10个,那么有一个问题就是,少释放一个应该释放的,而多释放了一个没有使用的。
因为p的地址往后移动了一个,但是,使用array的话,就没有这样的问题了,因为,使用char a8rray = p;但是地址还是从第一个开始的,因此释放的时候应该使用的是释放arra有,如果想使用free§;那么应当先将p的地址指向初始位置,这样的话就不会出现释放出现问题的情况呢。


这里在补充一个

#include<stdio.h>
#include<string.h>
#pragma warning(disable:4996) //注意这一句的使用,可以解决C语言中出现的一些兼容性问题

struct  C
{
	char name[100];
	int age;
};
int main()
{
	struct C stu;
	stu.age = 20;
	strcpy(stu.name, "刘德华");
	printf("%s,%d\n",stu.name,stu.age);

	system("pause");
	return 0;
}

从上面的代码可以看出,就是使用struct定义了一个结构体类型,然后里面放的有姓名和年龄。
然后又使用了一个strcmp进行赋值操作
这里再说一种情况,假设我使用的是指针,那么该如何操作了。
在这里插入图片描述
这个我们也容易理解,对于一个指针变量,一般是指向NULL。
在这里插入图片描述
那到底是为什么?
因为指针指向了null,也就是没有分配地址空间,那么在使用strcpy(stu1.name1, “刘德华”);的时候,当然不可以,不能进行赋值操作,毕竟连空间都没有开辟,肯定写不进去。
于是我们需要进行一个空间开辟,使得其可以接收写入的值(这里指的是开辟空间地址);
在这里插入图片描述
最后注意释放内存
完整代码:


struct D
{
	char *name1;
	int age1;
};
int main()
{


	struct D stu1 = { NULL,0 };
	stu1.age1 = 20;
	stu1.name1 = malloc(100);
	strcpy(stu1.name1, "刘德华");
	printf("%s,%d\n", stu1.name1, stu1.age1);
	free(stu1.name1);

	system("pause");
	return 0;
}

(完!)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值