天天看点

c语言用数组直接填充结构体,C语言第11题:结构体数组的定义与使用 + 结构体数组排序...

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

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

注意:

一下赋值是不能使用的

c语言用数组直接填充结构体,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;

}

c语言用数组直接填充结构体,C语言第11题:结构体数组的定义与使用 + 结构体数组排序...
c语言用数组直接填充结构体,C语言第11题:结构体数组的定义与使用 + 结构体数组排序...

这里补充一个知识点

首先用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进行赋值操作

这里再说一种情况,假设我使用的是指针,那么该如何操作了。

c语言用数组直接填充结构体,C语言第11题:结构体数组的定义与使用 + 结构体数组排序...

这个我们也容易理解,对于一个指针变量,一般是指向NULL。

c语言用数组直接填充结构体,C语言第11题:结构体数组的定义与使用 + 结构体数组排序...

那到底是为什么?

因为指针指向了null,也就是没有分配地址空间,那么在使用strcpy(stu1.name1, “刘德华”);的时候,当然不可以,不能进行赋值操作,毕竟连空间都没有开辟,肯定写不进去。

于是我们需要进行一个空间开辟,使得其可以接收写入的值(这里指的是开辟空间地址);

c语言用数组直接填充结构体,C语言第11题:结构体数组的定义与使用 + 结构体数组排序...

最后注意释放内存

完整代码:

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) 布尔型