c语言中如何将按结构体中的某个元素大小,将结构体排序输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中如何将按结构体中的某个元素大小,将结构体排序输出相关的知识,希望对你有一定的参考价值。

有struct protcol

char prot[16]; //协议名称
int num; //协议发生次数

protcol A,B;
A.prot = "FTP";A.num = 3;
B.prot = "P2P";B.num = 9;
现将A,B按协议的发生次数num排序并输出,就是输出的时候,要是B协议名字在前面,A在后面,用C语言如何实现?(纯C,没有容器)

参考技术A 做一个结构数组就可以了,这也算是一种容器了吧?
struct protcol

char prot[16]; //协议名称
int num; //协议发生次数
;

protcol p[10];
p[0].prot = "FTP";p[0].num = 3;
//...
然后就是用num排序,就和普通int数组排序一样
然后再顺序输出本回答被提问者采纳
参考技术B num 能唯一确定吧?就对A.num,B.num 进行排序阿,排完了根据num的值输出就行了吧 参考技术C struct protcol

char prot[16]; //协议名称
int num; //协议发生次数

protcol A,B;
A.prot = "FTP";A.num = 3;
B.prot = "P2P";B.num = 9;
现将A,B按协议的发生次数num排序并输出,就是输出的时候,要是B协议名字在前面
参考技术D 将结构体A,B.....按照num 排序不就行了。

C语言如何获取结构体中指定元素的大小?sizeof ( (X*)0 ) -> Y)

获取结构体的大小,这好办,这样就可以了:

#include <stdio.h>

struct user
{
	char name[20];
	char age[10];
};

int main() {
	printf("%d\\n", sizeof(user));//30
	return 0;
}

但是如果要获取结构体中某个元素大小,在不创建结构体的情况下,如何得到呢?

可以这么操作:

#include <stdio.h>

struct user
{
	char name[20];
	char age[10];
};

int main() {
	printf("%d\\n", sizeof((user*)0));//4
	printf("%d\\n", sizeof((user*)0)->name);//20
	printf("%d\\n", sizeof((user*)0)->age);//10
	return 0;
}

这种用法被网友称为空指针操作,大概等价于:

#include <stdio.h>

struct user
{
	char name[20];
	char age[10];
};

int main() {
	user* a = 0;
	//user* a = NULL;
	printf("%d\\n", sizeof(a->age));//10
	return 0;
}

至于为什么能写在同一行上表达,我就不了解了,匿名指针??

参考文章1:c语言如何求得结构体内某个元素的长度

参考文章2:C语言 泛型链表 如何计算(结构体中各元素)相对内存地址?(字节对齐,结构体对齐)offsetof()函数 & ( (struct X*)0 ) -> Y)语法

以上是关于c语言中如何将按结构体中的某个元素大小,将结构体排序输出的主要内容,如果未能解决你的问题,请参考以下文章

C语言,结构体中的数组怎么赋值,?

C语言,请问如何将结构体中的结构体拷贝到内存

C语言如何获取结构体中指定元素的大小?sizeof ( (X*)0 ) -> Y)

关于C语言的结构体中元素的筛选,排列顺序。

C语言结构体中冒号的作用——位域

用c语言给结构体中的元素排序