1、结构体数组的优点

结构体可以存储不同的数据类型,将他们互相联系起来。结构体数组可以连续存储多个结构体,和数组作用相似。比如想定义同一个最小外接矩形的四个坐标值,并给予这个矩形一个特征编号。当需要存储多个最小外接矩形的信息时,就需要动态申请一个结构体数组。

2、结构体数组的定义和使用

以某一个需求为例,给出了结构体数组的定义、初始化、用户交互使用、释放。

struct rect  //待检测区域的结构体
{int min_x; //左上坐标int min_y;int max_x; //右下坐标int max_y;char feature; //特征编号:A 泡棉 B 标签 C Logo
};
struct rect *area = (rect*)malloc(sizeof(rect) * area_num); //动态申请area_num个结构体数组,存储待检测区域信息if (area == NULL){printf("Fail to allocate memory to area\n");//cout << "Fail to allocate memory to rect1" << endl;exit(1);}for (int k = 0; k < area_num; k++)//初始化{area[k].min_x = 0;area[k].max_x = 0;area[k].min_y = 0;area[k].max_y = 0;area[k].feature = 0;}printf("请依次输入待检测区域坐标和待检测的特征\n");printf("坐标为左上坐标和右下坐标,特征编号为:A 泡棉 B 标签 C logo 各个数据空格隔开输入\n");for (int i = 0; i < area_num; i++){scanf("%d %d %d %d %c", &area[i].min_x, &area[i].min_y, &area[i].max_x, &area[i].max_y, &area[i].feature);}
for (int i = 0; i < area_num; i++)//循环截取判断{int rect_width = area[i].max_x - area[i].min_x + 1;int rect_height = area[i].max_y - area[i].min_y + 1;unsigned char *mindst = (unsigned char*)malloc(rect_width* rect_height* sizeof(unsigned char));unsigned char *minsrc = (unsigned char*)malloc(rect_width* rect_height* sizeof(unsigned char));cutout(gray2, minsrc, widths, heights, &area[i] );//基准图截取cutout(dst, mindst, widths, heights, &area[i] );//结果图截取printf("区域序号:%d :",i);switch (area[i].feature){case 'A': //泡棉检测{float result_jz01;float result_jz02;result_jz01 = calGLCM(minsrc, GLCM_ANGLE_VERTICAL, rect_width, rect_height);result_jz02 = calGLCM(mindst, GLCM_ANGLE_VERTICAL, rect_width, rect_height);printf("一致性差值 = %f\n", abs(result_jz01 - result_jz02));if (abs(result_jz01 - result_jz02) > 600) //阈值可调节printf("贴泡棉\n");elseprintf("未贴泡棉\n");break;};case 'B': //标签检测{float result_ssim;result_ssim = SSIM(minsrc, mindst, rect_width, rect_height);printf("相似性 = %f\n", abs(result_ssim));if (result_ssim > 0.4) //阈值可调节printf("贴标签\n");elseprintf("未贴标签\n");break;};case 'C': //logo检测{float result_ssim;result_ssim = SSIM(minsrc, mindst, rect_width, rect_height);printf("相似性 = %f\n", abs(result_ssim));if (result_ssim > 0.4) //阈值可调节printf("LOGO正确\n");elseprintf("LOGO不正确\n");break;};default: printf("未输入特征类型!");}free(mindst);free(minsrc);}
free(area);//一定要释放

C语言结构体数组的使用相关推荐

  1. C语言 | 结构体数组

    C语言结构体数组概述 一个结构体变量中可以存放一组有关联的数据,如一个学生的学号.姓名.成绩等数据,如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组. 结构体数组与之前介绍的数值型 ...

  2. c语言字符结构数组初始化,C语言结构体数组初始化问题

    C语言结构体数组指定初始化器时,下面的三种方法,只有第三种可以,但是第一,二种,我看不出语法上哪错了,编译器DEVc++会报错 [Error] C99 designator 'num_insur' o ...

  3. c语言 结构体数组的赋值

    c语言 结构体数组的赋值 //**创建结构体** #include<stdio.h> struct Class{int id;char name[10]; }; //******结构体数组 ...

  4. c语言如何为结构数组赋值,C语言结构体数组同时赋值的另类用法

    说到C语言结构体数组的同时赋值,许多人一想就会想到用以下的这种方法,咱们来写一个例子: #include struct student { int a; int b ; int c ; }; stru ...

  5. C语言结构体数组,结构体数组的定义,结构体数组的输出,结构体的应用

    结构体数组 结构体数组的定义: 结构体数组格式:声明变量类型 数组名称[数组长度] //定义一个结构体数组名为a,它里面包含有5个元素,每一个元素都是一个结构体变量 Wor a[5]={}; #inc ...

  6. c语言结构体数组内存大小,如何为C语言的结构体数组分配/释放内存?

    如何为C语言的结构体数组分配/释放内存? struct emp { char name[10]; float salary; }; int main(int argc,char* argv[]) { ...

  7. c语言——结构体数组——学生成绩表

    例题详解: 1. 在主函数中定义结构体数组,struct student stutable[10]; struct student {int stunum;//学号char name[20];//姓名 ...

  8. C 语言结构体数组指针以及函数

    结构体数组指针 指针变量可以指向一个结构体数组,这时指针变量的值是整个数组的首地址. 设 ps 为指向结构体数组的指针变量,则 ps 也指向该结构体数组的第 0个元素,ps+1 指向第一个元素,ps+ ...

  9. C语言结构体数组成员的赋值

    结构体的数组不能直接等号赋值,如果直接赋值会出现如下错误 错误代码示范: 编译结果: 错误原因: 结构体数组成员在引用的时候取的是数组名(是一个常量),所以不能直接将地址值赋给常量. 正确代码: 字符 ...

最新文章

  1. hdu-1003 or 最大子序列和(四种解题方法)
  2. 跳出数据计算拯救人工智能之打败机器学习方法
  3. 凤凰式期权matlab代码,美式期权二叉树定价及MATLAB程序.doc
  4. linux 查看系统函数库,教你在Linux操作系统中如何创建函数库
  5. 像MIUI一样做Zabbix二次开发(5)——那些坑和优化方向
  6. java匹配字符串所在位置_Java:获取字符串中匹配项位置的方法?
  7. RGB转换cv::Mat
  8. python培训拾遗
  9. 如何下载矢量电子地图
  10. NTFS文件系统文件删除对比
  11. vs2017旗舰版_2017年的所有旗舰手机都有明显的妥协。 这是他们告诉我们有关设计的信息。...
  12. JavaScript是单线程还是多线程?
  13. 编写Java程序,实现简单的五子棋博弈游戏(美和易思Java练习习题)
  14. 集米社浅谈下那些令网兼者疯狂的时代。
  15. 基础爬虫实战案例之获取游戏商品数据
  16. 在磨金石教育学室内设计靠谱吗?学费贵吗?老师负责吗?
  17. 文献阅读 2018 Deep Retinex Decomposition for low-light Enhancement
  18. 【科创人独家】科界CTO林镇南:言必真,行必果,没有尽力而为,只有全力以赴...
  19. Java面试大厂名企高频真题--01基础篇
  20. 基于Ant Design of Vue实现时长组件 duration

热门文章

  1. 工业以太网交换机的重要技术参数分析
  2. 【渝粤题库】陕西师范大学300003 世界史 (上)
  3. 【渝粤教育】 国家开放大学2020年春季 2136管理会计 参考试题
  4. [渝粤教育] 中国地质大学 信息管理概论 复习题
  5. 【渝粤题库】国家开放大学2021春2617生产与运作管理题目
  6. layui datetimepicker 只日期范围到当前时间的前一天_浪琴手表如何正确调整日期?手表调日期的方法...
  7. php json追加500错误,在composer.json中添加了一个git地址;composer update 报错
  8. 解决在html中引入font-awesome的css文件后, 图标显示不出来
  9. linux常用命令:touch 命令
  10. 软件测试实验1:为三角形问题编写一个Java程序,并用Junit测试程序