C语言第11题:结构体数组的定义与使用 + 结构体数组排序
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
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
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
#include
#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;
}
(完!)
C语言第11题:结构体数组的定义与使用 + 结构体数组排序相关教程
大二数据结构学习3(栈和队列)
大二数据结构学习3(栈和队列) 栈和队列 栈 一 定义 二 代码结构 【1】静态分布 【2】动态分布 【3】初始化 【4】入栈 【5】出栈 【6】建立完整栈,实现入栈出栈 链栈 一 定义 二 结构代码 【1】建立结构 【2】初始化 【3】入栈 【4】出栈 【5】总体建立,实
Java语言基础
Java语言基础 Java语言基础 文章目录 Java语言基础 1、Java概述 2、Java基础语法 2.1 数据类型 2.2 访问修饰符 2.3 常用关键字 2.4 流程控制语句 3、面向对象 4、IO流 4.1 IO流分类 4.2 Java I/O使用的设计模式 4.3 BIO、NIO、AIO区别 5、反射 6、常用类 6.1
【数据结构】详解多路查找树之2-3树
【数据结构】详解多路查找树之2-3树 文章目录 概念 2-3树 2-3树的插入实现 2-3树的删除实现 测试代码 我们之前学习的树,都是一个结点可以有多个孩子,但是自身只存储一个元素。二叉树的限制会更多,节点最多只能有两个孩子。 一个结点只能存储一个元素,在元
一元稀疏多项式计算器 c语言 数据结构OJ题
一元稀疏多项式计算器 c语言 数据结构OJ题 标题 一元稀疏多项式计算器 时间限制 2S 内存限制 10000 Kb 问题描述 见习题集P81 问题输入 每组数据有3行构成,第1行为3个正整数n,m,t, n表示第一个多项式的项数,m表示第二个多项式的项数,t表示运算类型,0为
树的存储结构
树的存储结构 提到存储结构,可以很自然的想到顺序存储结构和链式存储结构两种。树这种数据结构类型,它是由结点和联接结点的边构成。这些边,联接了树中的任意两个结点,从计算机内存中的存储方式来看,其实,就是通过指针保存了地址,从而实现了两个结点间
线性表的链式存储结构
线性表的链式存储结构 线性表从物理结构上分,有顺序存储结构和链式存储结构两种。既然有了顺序存储结构,又何必再有一个链式存储结构呢?原因就在于,顺序存储结构在存储大量的元素,对这些元素进行插入或这删除操作时,会浪费大量的时间。因为,采用顺序存
PTA|6-1 一元多项式加法(30分)【数据结构】
PTA|6-1 一元多项式加法(30分)【数据结构】 输入格式: 输入数据为两行,分别表示两个多项式。 每行多项式首先输入一个n,代表多项式的项数,接着是n对整数,每对整数的第一个是系数,第二个是指数。每个多项式不超过100项,整数间用空格隔开。 输出格式: 输
Java语言基础
Java语言基础 基础语法 Java有哪些数据类型 定义:Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间。 基本数据类型 数值型 整数类型(byte,short,int,long) 浮点类型(float,double) 字符型(char) 布尔型