立即前往

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
查看全部活动
热门活动
  • 智算采购季 热销S6云服务器2核4G限时88元/年起,部分主机可加赠对象存储组合包!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 一键部署Llama3大模型学习机 0代码一键部署,预装最新主流大模型Llama3与StableDiffusion
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 产品能力
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
    • 关系数据库SQL Server版
    • 企业主机安全
    • 云防火墙
    • CDN加速
    • 物理机
    • GPU云主机
    • 天翼云电脑(政企版)
    • 天翼云电脑(公众版)
    • 云主机备份
    • 弹性云主机
      搜索发现
      关系数据库SQL Server版企业主机安全云防火墙CDN加速物理机GPU云主机天翼云电脑(政企版)天翼云电脑(公众版)云主机备份弹性云主机
    • 文档
    • 控制中心
    • 备案
    • 管理中心
    • 登录
    • 免费注册

    自定义类型:结构体

    首页 知识中心 存储 文章详情页

    自定义类型:结构体

    2025-02-11 09:37:48 阅读次数:9

    int,位段,内存,字节,对齐,成员,结构

    结构体类型的声明

    结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。而数组是一些类型相同元素的集合,每个元素的类型都是一样的。

    结构的声明

    struct tag
    {
     member-list;
    }variable-list;//分号不能少
    
    //tag,结构体标签
    //member-list,成员列表
    //variable-list,变量列表
    

    什么情况下,我们要用到结构体呢?当我们想要描述一些复杂变量时,例如:一本书,要描述其作者,出版社,出版日期…… 一个学生,可以从姓名,学号,年龄,性别……来分别描述。

    现在就可以创建一个结构体类型:学生

    struct stu//创建了一个结构体类型学生
    {
    	char name[20];//姓名
    	int age;//年龄
    	char sex[5];//性别
    	char id[20];//学号
    };
    

    结构体变量的创建和初始化 

    #include <stdio.h>
    struct stu//创建了一个结构体类型学生
    {
    	char name[20];//姓名
    	int age;//年龄
    	char sex[5];//性别
    	char id[20];//学号
    };
    
    int main()
    {
    	//创建一个学生类型的结构体变量,并且初始化
    	//一个中文汉字表示两个英文字符
    	struct stu s1 = { "zhangsan", 18, "男", "20240305" };
    	printf("%s %d %s %s\n", , s1.age, s1.sex, s1.id);
    	struct stu s2 = { "李四", 20, "男",  "20220305" };
    	printf("%s %d %s %s\n", , s2.age, s2.sex, s2.id);
    }
    
    

    自定义类型:结构体

    结构的特殊声明 

    在声明结构的时候,可以不完全的声明。

    struct
    {
    	int a;
    	char b;
    	float c;
    }x;
    
    struct
    {
    	int a;
    	char b;
    	float c;
    }a[20], * p;
    //上面的两个结构在声明的时候省略掉了结构体标签(tag)
    

    那么就有一个问题来了?这两个结构体变量是一样的吗?或者说是:*p = &a; 

    答案是:编译器会把上面的两个声明当成完全不同的两个类型,所以是非法的。 匿名的结构体类型,如果没有对结构体类型重命名的话,基本上只能使用一次。因此,我们在创建结构体类型时,要完全声明。

    结构的自引用 

    在结构中包含一个类型为该结构本身的成员是否可以呢? 比如,定义一个链表的节点:

    struct Node
    {
    	int data;
    	struct Node next;
    };

    上述代码正确吗?如果正确,那 sizeof(struct Node) 是多少? 仔细分析,其实是不行的,因为⼀个结构体中再包含⼀个同类型的结构体变量,这样结构体变量的大小就会无穷的大,是不合理的。自定义类型:结构体

    正确的自引用方式: 

    struct Node
    {
    	int data;
    	struct Node* next;
    };

    这个是把下一个结构体的的地址拿到了,然后就可以逐级的去找了。

    在结构体自引用使用的过程中,夹杂了 typedef 对匿名结构体类型重命名,也容易引入问题。

    typedef struct
    {
     int data;
     Node* next;
    }Node;

    这个Node是我们对匿名结构体重命名之后才产生的,但是我们却在匿名结构体内部使用了这个Node来创建成员变量。这就相互矛盾了。最好的解决办法就是我们不要在创建匿名结构体 。

    typedef struct Node
    {
     int data;
     struct Node* next;
    }Node;
    

    在重命名时,这个struct Node类型已经有了,因此我们在创建成员变量时使用struct Node就是没问题的。可能有小伙伴不知道那个代码是什么意思,下面有介绍:自定义类型:结构体

    结构体内存对齐 

    我们已经掌握了结构体的基本使用了。 现在我们深入讨论一个问题:计算结构体的大小。 这也是一个特别热门的考点: 结构体内存对齐。

    对齐规则

    首先得掌握结构体的对齐规则: 1. 结构体的第一个成员对齐到和结构体变量起始位置偏移量为0的地址处 2. 其他成员变量要对齐到某个数字(这个数是对齐数)的整数倍的地址处。 对齐数 = 编译器默认的一个对数数 与 该成员变量大小的较小值。VS 中默认的值为 8    Linux中 gcc 没有默认对齐数,对齐数就是成员自身的大小  3. 结构体总大小为最大对齐数(结构体中每个成员变量都有⼀个对齐数,所有对齐数中最大的)的 整数倍。 4. 如果嵌套了结构体的情况,嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体中成员的对齐数)的整数倍。

    接下来,我们就用一些练习来彻底理解它们。 (下面所有打印时,都是用的%d,没有用%zd,两者都可以,不过用%zd更好,而且也没有警告。)

    #include <stdio.h>
    struct S1
    {
    	char c1;
    	int i;
    	char c2;
    };
    
    int main()
    {
    	printf("%d\n", sizeof(struct S1));
    	return 0;
    }
    

    自定义类型:结构体

    自定义类型:结构体

    #include <stdio.h>
    struct S2
    {
    	char c1;
    	char c2;
    	int i;
    };
    
    int main()
    {
    	printf("%d\n", sizeof(struct S2));
    	return 0;
    }
    

    自定义类型:结构体

    自定义类型:结构体

    这个的分析过程没有第一个详细,如果没有看懂的话,可以去多看看第一个练习。

    #include <stdio.h>
    struct S3
    {
    	double d;
    	char c;
    	int i;
    };
    
    int main()
    {
    	printf("%d\n", sizeof(struct S3));
    	return 0;
    }

    自定义类型:结构体

    自定义类型:结构体

    #include <stdio.h>
    struct S3
    {
    	double d;
    	char c;
    	int i;
    };
    struct S4
    {
    	char c1;
    	struct S3 s3;
    	double d;
    };
    
    int main()
    {
    	printf("%d\n", sizeof(struct S4));
    }
    

    自定义类型:结构体

    自定义类型:结构体

    为什么存在内存对齐 

    1. 平台原因 (移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。
    2. 性能原因: 数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。假设一个处理器总是从内存中取8个字节,则地址必须是8的倍数。如果我们能保证将所有的double类型的数据的地址都对齐成8的倍数,那么就可以用一个内存操作来读或者写值了。否则,我们可能需要执行两次内存访问,因为对象可能被分放在两个8字节内存块中。自定义类型:结构体

    总体来说:结构体的内存对齐是拿空间来换取时间的做法。

    那在设计结构体的时候,我们既要满足对齐,又要节省空间,如何做到呢?让占用空间小的成员尽量集中在一起。

    struct S1
    {
    	char c1;//0
    	//3
    	int i;//4~7
    	char c2;//8
    };
    
    
    struct S2
    {
    	char c1;//0
    	char c2;//1
    	int i;//4~7
    };

    我们就会发现s1是8个字节的空间,s2是7个字节的空间 

    修改默认对齐数

    #pragma 这个预处理指令,可以改变编译器的默认对⻬数
    #include <stdio.h>
    #pragma pack(1)//设置默认对⻬数为1
    struct S
    {
    	char c1;//0
        //4(int) > 1(VS),1
    	int i;//1~4
        //1(char) == 1(VS),1
    	char c2;//5
        //总共的大小是6个字节
    };
    #pragma pack()//取消设置的对⻬数,还原为默认
    int main()
    {
    	printf("%d\n", sizeof(struct S));
    	return 0;
    }
    

    自定义类型:结构体

    结构体在对齐方式不合适的时候,我们可以自己更改默认对齐数。注意一般都是改成2的次方数。例如:1是2的0次方。

    结构体传参

    #include <stdio.h>
    struct S
    {
    	int data[1000];
    	int num;
    };
    struct S s = { {1,2,3,4}, 1000 };
    //结构体(数值)传参
    void print1(struct S s)
    {
    	printf("%d\n", s.num);
    }
    //结构体地址传参
    void print2(struct S* ps)
    {
    	printf("%d\n", ps->num);
    }
    
    int main()
    {
    	print1(s);//传值调用
    	print2(&s);//传址调用
    	return 0;
    }

    我们前面在学习函数的时候,就学习了传值调用与传址调用的区别以及选用。

    传值调用:会重新创建一个变量来接收,会浪费内存空间和时间。 

    函数传参的时候,参数是需要压栈,会有时间和空间上的系统开销。 如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。

    传址调用:拿到的是地址,会修改这个变量本身的值。(如果我们用const来修饰会更好)

    总结:我们在结构体传参的时候,应该采用传址调用,并用const修饰指针。

    结构体实现位段

    什么是位段

    位段的声明和结构是类似的,有两个不同: 1. 位段的成员必须是 int、unsigned int 或signed int ,在C99中位段成员的类型也可以选择其他类型(只要是整型家族即可)。 2. 位段的成员名后边有一个冒号和一个数字。

    例如:

    #include <stdio.h>
    struct A
    {
    	//与结构体不同,多了个冒号和数字
        //这里的数字是指比特位
    	int _a : 2;
    	int _b : 5;
    	int _c : 10;
    	int _d : 30;
    };
    
    int main()
    {
    	printf("%zd\n", sizeof(struct A));
    	return 0;
    }

    A就是一个位段类型。那位段A所占内存的大小是多少?

    自定义类型:结构体

    为什么是8个字节呢?我们现在就一起来分析一下。 

    位段的内存分配

    1. 位段的成员可以是 int unsigned int signed int 或者是 char 等类型(只要是整型家族即可) 2. 位段的空间上是按照需要以4个字节( int )或者1个字节( char )的方式来开辟的(一次只能开辟1个字节的空间或者4个字节的空间)。 3. 位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段。

    现在我们就来具体分析这个位段的内存分配。

    #include <stdio.h>
    struct S
    {
        //冒号后面的数字,是这个变量对应的空间,单位是比特位
        //创建了char类型的变量,分别给出3,4,5,4个比特位的空间
    	char a : 3;
    	char b : 4;
    	char c : 5;
    	char d : 4;
    };
    
    int main()
    {
    	struct S s = { 0 };
        //分别给对应的变量赋值
    	s.a = 10;
    	s.b = 12;
    	s.c = 3;
    	s.d = 4;
    	return 0;
    }

    因为这个位段全部是char类型,是一个字节一个字节的分配,所以是先分配一个字节(8个比特位)的空间给s,a先是用了3个比特位,后面b又用了4个比特位,当c要来使用这个空间时,就会发现这个空间不足,这时就会另外分配一个字节的空间给c来用。但是就有一个问题出来了:这个c会用前面那个字节剩下的一个比特位吗?如果不用的话,就会舍弃最终的结果是3个字节。如果用的话,最终的结果就是2个字节。

    自定义类型:结构体

    从结果来看,在内存中分配的空间是按下面的方式来的 

    自定义类型:结构体

    至于到底是不是按照从低地址到高地址这样的分配,我们就需要通过赋值来观察。

    自定义类型:结构体

    上面这个是我们分析出来的结果。下面这个是在内存中的情况。自定义类型:结构体

    可以看到我们分析的结果是正确的。(注意这些数字都是十六进制,因为在操作符中我们学习了四个二进制数字对应一个十六进制数字) 。

    位段的跨平台问题

     1. int 位段被当成有符号数还是无符号数是不确定的,就是这个位段成员的类型是int 时,我们不知道这个int 是signed int 还是unsigned int。 2. 位段中最大位的数目不能确定。(16位机器最大(int)16;32位机器最大(int)32,会被写成27,在16位机器会出问题。 3. 位段中的成员在内存中从左向右分配,还是从右向左分配标准尚未定义(我们刚刚测试的结果是VS自己这样设置的)。 4. 当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是舍弃剩余的位还是利用,这是不确定的(刚刚那个也是VS自己设置的,因此VS对于新手是非常友好的)。

    总结: 跟结构相比,位段可以达到同样的效果,并且可以很好的节省空间(例如:表示真假:用一个比特位就能够表示0/1,我们就没必要用一个字节或者是四个字节了),但是有跨平台的问题存在。

    位段的应用

    下图是网络协议中,IP数据报的格式,我们可以看到其中很多的属性只需要几个bit位就能描述,这里使用位段,能够实现想要的效果,也节省了空间,这样网络传输的数据报大小也会较小一些,对网络的畅通是有帮助的。

    自定义类型:结构体

    位段使用的注意事项 

    位段的几个成员共有同一个字节,这样有些成员的起始位置并不是某个字节的起始位置,那么这些位置处是没有地址的。因为内存中每个字节分配一个地址,一个字节内部的bit位是没有地址的。 所以不能对位段的成员使用取地址操作符(&),这样就不能使用scanf直接给位段的成员输入值,只能是先输入放在一个变量中,然后赋值给位段的成员。

    #include <stdio.h>
    struct A
    {
    	int _a : 2;
    	int _b : 5;
    	int _c : 10;
    	int _d : 30;
    };
    int main()
    {
    	struct A sa = { 0 };
    	scanf("%d", &sa._b);//这是错误的,编译器这里也会报错
    
    	//正确的⽰范
    	int b = 0;
    	scanf("%d", &b);
    	sa._b = b;
    	return 0;
    }

    自定义类型:结构体

     好啦!本期结构体的学习就到此结束了!我们下一期再一起学习吧!

    版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.csdn.net/2301_80854132/article/details/136466175,作者:我要学编程(ಥ_ಥ),版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

    上一篇:单链表的介绍及基础操作

    下一篇:数据结构-顺序表详解(看这篇就足够了,哈哈哈)

    相关文章

    2025-04-23 08:18:38

    C语言:深入理解指针(1)

    C语言:深入理解指针(1)                                                  

    2025-04-23 08:18:38
    const , 内存 , 函数 , 变量 , 地址 , 字节 , 指针
    2025-04-22 09:44:09

    【C语言:自定义类型(结构体、位段、共用体、枚举)】

    【C语言:自定义类型(结构体、位段、共用体、枚举)】

    2025-04-22 09:44:09
    位段 , 对齐 , 成员 , 枚举 , 结构
    2025-04-22 09:44:09

    【Java】类与对象简介

    【Java】类与对象简介

    2025-04-22 09:44:09
    new , 内存 , 对象 , 引用 , 面向对象
    2025-04-22 09:44:09

    【Java】引用传递的实例分析

    【Java】引用传递的实例分析

    2025-04-22 09:44:09
    String , 传递 , 内存 , 引用
    2025-04-22 09:40:08

    【Hive】常用的数据类型

    【Hive】常用的数据类型

    2025-04-22 09:40:08
    data , type , 备注 , 字符串 , 字节
    2025-04-22 09:28:19

    【C++】初识类和对象

    【C++】初识类和对象

    2025-04-22 09:28:19
    函数 , 对象 , 成员 , 指针 , 访问
    2025-04-22 09:27:37

    C语言指针(1)

    C语言中的指针是一种变量,它存储了一个内存地址。通过指针,我们可以直接访问这个内存地址中存储的数据。指针变量用于存储地址,而不是存储实际的值。

    2025-04-22 09:27:37
    int , 变量 , 地址 , 指向 , 指针
    2025-04-22 09:27:17

    指针的理解(三)

    指针的理解(三)

    2025-04-22 09:27:17
    int , 函数指针 , 变量 , 指针 , 数组
    2025-04-22 09:27:17

    【C++】优先级队列(容器适配器)

    【C++】优先级队列(容器适配器)

    2025-04-22 09:27:17
    deque , 元素 , 内存 , 适配器 , 队列
    2025-04-22 09:24:51

    数据在内存中的存储(超详细讲解)

    数据在内存中的存储(超详细讲解)

    2025-04-22 09:24:51
    char , int , long , 存储
    查看更多
    推荐标签

    作者介绍

    天翼云小翼
    天翼云用户

    文章

    32777

    阅读量

    4820223

    查看更多

    最新文章

    数据在内存中的存储(超详细讲解)

    2025-04-22 09:24:51

    Redis多级缓存指南:从前端到后端全方位优化!

    2025-04-15 09:24:56

    javascript 西瓜一期 15 数据的存储单位

    2025-04-09 09:14:24

    php phpexcel导文件爆500(爆内存) && 应对

    2025-03-31 08:57:48

    Linux系统性能调优技巧

    2025-03-28 06:50:00

    极限挑战:40亿个非负整数中找到没有出现的数(bit数组)

    2025-03-27 09:34:39

    查看更多

    热门文章

    获取服务器CPU、内存等各类信息工具类

    2023-04-27 08:00:25

    linux的存储管理

    2023-03-14 11:10:02

    libcurl第十二课 内存分析

    2023-03-15 09:25:34

    JS 变量、作用域与内存

    2023-05-19 03:35:34

    Confluence 7 如何修改启动内存

    2023-05-31 08:47:59

    JVM内存模型

    2023-05-31 08:43:18

    查看更多

    热门标签

    存储 缓存 内存 数据库 数据 redis mysql 服务器 数据恢复 Redis linux java sql MySQL 数据结构
    查看更多

    相关产品

    弹性云主机

    随时自助获取、弹性伸缩的云服务器资源

    天翼云电脑(公众版)

    便捷、安全、高效的云电脑服务

    对象存储

    高品质、低成本的云上存储服务

    云硬盘

    为云上计算资源提供持久性块存储

    查看更多

    随机文章

    Redis 的数据被删除,为什么占用内存没减少?

    【C初阶】内存函数:memcpy+memmove+memset+memcmp

    Redis入门

    【内存管理】flink内存管理(一):内存管理概述:flink主动管理内存原理、flink内存模型

    不重复大数据量的批量生成

    Linux内核之内存4: 内存与I/O的交换

    • 7*24小时售后
    • 无忧退款
    • 免费备案
    • 专家服务
    售前咨询热线
    400-810-9889转1
    关注天翼云
    • 权益商城
    • 天翼云APP
    • 天翼云微信公众号
    服务与支持
    • 备案中心
    • 售前咨询
    • 智能客服
    • 自助服务
    • 工单管理
    • 客户公告
    • 涉诈举报
    账户管理
    • 管理中心
    • 订单管理
    • 余额管理
    • 发票管理
    • 充值汇款
    • 续费管理
    快速入口
    • 权益商城
    • 文档中心
    • 最新活动
    • 免费试用
    • 信任中心
    • 天翼云学堂
    云网生态
    • 甄选商城
    • 渠道合作
    • 云市场合作
    了解天翼云
    • 关于天翼云
    • 天翼云APP
    • 服务案例
    • 新闻资讯
    • 联系我们
    热门产品
    • 云电脑
    • 弹性云主机
    • 云电脑政企版
    • 天翼云手机
    • 云数据库
    • 对象存储
    • 云硬盘
    • Web应用防火墙
    • 服务器安全卫士
    • CDN加速
    热门推荐
    • 云服务备份
    • 边缘安全加速平台
    • 全站加速
    • 安全加速
    • 云服务器
    • 云主机
    • 智能边缘云
    • 应用编排服务
    • 微服务引擎
    • 共享流量包
    更多推荐
    • web应用防火墙
    • 密钥管理
    • 等保咨询
    • 安全专区
    • 应用运维管理
    • 云日志服务
    • 文档数据库服务
    • 云搜索服务
    • 数据湖探索
    • 数据仓库服务
    友情链接
    • 中国电信集团
    • 189邮箱
    • 天翼企业云盘
    • 天翼云盘
    ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
    公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
    • 用户协议
    • 隐私政策
    • 个人信息保护
    • 法律声明
    备案 京公网安备11010802043424号 京ICP备 2021034386号