自定义类型

#include<stdio.h>
#include<stdlib.h>
//自定义类型
//1.结构体
//2.枚举
//3.共用体
//1.结构体
//1.声明 :
//struct A {
// int a;
// int b;
// double c;
//};
//记住不能忘记后边";"
//变量的定义
//struct A b;
//这里的struct A 是一个类型名 在c++中可以直接A b 然而C语言并不支持如想使用可以这样子:
//typedef struct A A;
//A c;
//结构体不可以定义自己类型的变量,不然就会进入无限的递归
//struct B {
// struct B c;
//};
//这样子是不允许的
//结构体不能定义自己类型的变量但是却可以定义自己类型的指针,重要的数据结构如:链表,树就是这样来操作的
//struct s {
// int a;
// char b;
// struct s* s;
//};
//这样子是绝对允许的
//3.结构体的初始化
//typedef struct s {
// int a;
// char b;
// short arr[10];
//}S;
//S s = { 10,10,{0} };这样子是可以的
//s={20,2,{10}};//这样子是不可以的
//***结构体的内存对齐
//三条规则:
//1.第一个变量在与结构体变量偏移量为0的位置处
//2.其他的变量要对齐到某个数字(对其数字)的整数倍地址处
//对齐数的计算::对齐数==系统的默认数字的对齐数和这个数字的最小值
//VS里边的对齐数是8当然可以通过#pragma pack()括号里边填入参数的方式来进行修改
//注意linex的对齐数绝不是4 (优快云)上是错的!!!
//3.结构体的总大小为最大对齐数的整数倍
//4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。
//存在最大对齐的原因
//1.平台原因::不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。
//2.性能原因:: 数据结构(尤其是栈)应该尽可能地在自然边界上对齐。 原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对于对齐的内存,处理器只需要一次即可完成访问
struct S1
{
char c1;
int i;
char c2;
};
//内存分布:1代表占有2代表浪费的内存
//1222 1111 1222
//12
struct S2
{
double d;
char c;
int i;
};
//1111 1111 1222 1111
//16
struct S3
{
char c1;
struct S2 s;
double d;
};
//1222 1111 1111 1111 1222 1111 1111 2222
//32
//默认参数是可以修改的
//方法:: #pragma pack
//位段
//位段的类型必须是int unsigned int signed int
//位断的后边有一个冒号和一个数字
//比如 signed int a:1//表示a只占一个比特位,记住是一个比特位而绝非一个字节
struct A {
int _a : 4;
int _b : 11;
int _c : 20;
int _d : 30;
}A;
//按照比特位来写 1代表占有 2代表浪费
//11112222 11111112 11111111 11111111 11112222 11111111 11111111 11111111 11222222 22222222 22222222 22222222
//联合体
//枚举
enum Sex {
male,
female,
othersex
};
//共用体
union MyUnion
{
int a;
char c;
};//所有变量共用痛一块内存
int main()
{
printf("%d\n", sizeof(struct S1));
printf("%d\n", sizeof(struct S2));
printf("%d\n", sizeof(struct S3));
printf("%d\n", sizeof(struct A));
enum Sex sex;//枚举变量和枚举常量不同,切记!!!
sex = 5;
printf("%d\n", sex);//本来不应该通过,但是由于C语言是弱语言,就很烦
sex = male;
printf("%d\n", sex);//0
union MyUnion Un;
Un.a = 15;//c的值也发生了改变,因为他们共用同一块内存
printf("%d\n", Un.c);//15
return 0;
}

内容概要:本文介绍了ENVI Deep Learning V1.0的操作教程,重点讲解了如何利用ENVI软件进行深度学习模型的训练与应用,以实现遥感图像中特定目标(如集装箱)的自动提取。教程涵盖了从数据准备、标签图像创建、模型初始化与训练,到执行分类及结果优化的完整流程,并介绍了精度评价与通过ENVI Modeler实现一键化建模的方法。系统基于TensorFlow框架,采用ENVINet5(U-Net变体)架构,支持通过点、线、面ROI或分类图生成标签数据,适用于多/高光谱影像的单一类别特征提取。; 适合人群:具备遥感图像处理基础,熟悉ENVI软件操作,从事地理信息、测绘、环境监测等相关领域的技术人员或研究人员,尤其是希望将深度学习技术应用于遥感目标识别的初学者与实践者。; 使用场景及目标:①在遥感影像中自动识别和提取特定地物目标(如车辆、建筑、道路、集装箱等);②掌握ENVI环境下深度学习模型的训练流程与关键参数设置(如Patch Size、Epochs、Class Weight等);③通过模型调优与结果反馈提升分类精度,实现高效自动化信息提取。; 阅读建议:建议结合实际遥感项目边学边练,重点关注标签数据制作、模型参数配置与结果后处理环节,充分利用ENVI Modeler进行自动化建模与参数优化,同时注意软硬件环境(特别是NVIDIA GPU)的配置要求以保障训练效率。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值