C++指针精髓(经典必看)

-7-
第三节:指针的算术运算
指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的 加减运算的意义是不一样的,以单元为单位。例如: 例二:
char a[20]; int *ptr=(int *)a; //强制类型转换并不会改变 a 的类型 ptr++; 在上例中,指针 ptr 的类型是 int*,它指向的类型是 int,它被初始化 为指向整型变量 a。接下来的第 3 句中,指针 ptr 被加了 1,编译器是这样处 理的:它把指针 ptr 的值加上了 sizeof(int),在 32 位程序中,是被加上了 4,因为在 32 位程序中,int 占 4 个字节。由于地址是用字节做单位的,故 ptr 所指向的地址由原来的变量 a 的地址向高地址方向增加了 4 个字节。 由于 char 类型的长度是一个字节,所以,原来 ptr 是指向数组 a 的第 0 号 单元开始的四个字节,此时指向了数组 a 中从第 4 号单元开始的四个字节。 我们可以用一个指针和一个循环来遍历一个数组,看例子: 例三: int array[20]={0}; int *ptr=array; for(i=0;i<20;i++) {
-6-
从指针的值所代表的那个内存地址开始,长度为 si zeof(指针所指向的类型) 的一片内存区。以后,我们说一个指针的值是 XX,就相当于说该指针指向了 以 XX 为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相 当于说该指针的值是这块内存区域的首地址。
指针所指向的内存区和指针所指向的类型是两个完全不同的概念。在例 一中,指针所指向的类型已经有了,但由于指针还未初始化,所以它所指向 的内存区是不存在的,或者说是无意义的。
//指针所指向的类型是 int
(2)char*ptr; //指针所指向的的类型是 char
(3)int**ptr; //指针所指向的的类型是 int*
(4)int(*ptr)[3]; //指针所指向的的类型是 int()[3]
(5)int*(*ptr)[4]; //指针所指向的的类型是 int*()[4]
-4-
第二节:细说指针
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地 址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指 向的 类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。 让我们分别说明。 先声明几个指针放着做例子: 例一:
(1)int*ptr; (2)char*ptr; (3)int**ptr; (4)int(*ptr)[3]; (5)int*(*ptr)[4];
-5-
怎么样?找出指针的类型的方法是不是很简单?
2.指针所指向的类型
当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了
编译器将把那片内存区里的内容当做什么来看待。
从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声
明符*去掉,剩下的就是指针所指向的类型。例如:
(1)int*ptr;
1.1 指针的类型
从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部 分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各 个指针的类型:
(1)int*ptr;//指针的类型是 int* (2)char*ptr;//指针的类型是 char* (3)int**ptr;//指针的类型是 int** (4)int(*ptr)[3];//指针的类型是 int(*)[3] (5)int*(*ptr)[4];//指针的类型是 int*(*)[4]
int p(int); //从 P 处起,先与()结合,说明 P 是一个函数,然后进入 //()里分析,说明该函数有一个整型变量的参数 //然后再与外面的 int 结合,说明函数的返回值是 //一个整型数据
Int (*p)(int); //从 P 处开始,先与指针结合,说明 P 是一个指针,然后与 //()结合,说明指针指向的是一个函数,然后再与()里的 //int 结合,说明函数有一个 int 型的参数,再与最外层的 //int 结合,说明函数的返回类型是整型,所以 P 是一个指 //向有一个整型参数且返回类型为整型的函数的指针
C++指针精髓
C++指针精髓..............................................................................................................- 1 摘要......................................................................................................................- 2 第一节:指针举例............................................................................................. - 2 第二节:细说指针............................................................................................. - 5 1.1 指针的类型............................................................................................ - 5 2.指针所指向的类型................................................................................... - 6 3.指针的值----或者叫指针所指向的内存区或地址...............................- 6 4 指针本身所占据的内存区........................................................................ - 7 第三节:指针的算术运算................................................................................. - 8 第四节:运算符&和*....................................................................................... - 12 第五节:指针表达式....................................................................................... - 13 5、数组和指针的关系..................................................................................... - 15 6、指针和结构类型的关系............................................................................. - 19 7、指针和函数的关系..................................................................................... - 22 8、指针类型转换............................................................................................. - 24 9、指针的安全问题......................................................................................... - 28 10、结束语....................................................................................................... - 30 -
第一节:指针举例
int p;
//这是一个普通的整型变量
int *p;
//首先从 P 处开始,先与*结合,所以说明 P 是一
//个指针,然后再与 int 结合,说明指针所指向
//的内容的类型为 int 型.所以 P 是一个返回整
//型数据的指针
int p[3]; //首先从 P 处开始,先与[]结合,说明 P 是一个数
所以看起书来前后矛盾,越看越糊涂。
3.指针的值----或者叫指针所指向的内存区或地址
指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而 不是一个一般的数值。在 32 位程序里,所有类型的指针的值都是一个 32 位 整数,因为 32 位程序里内存地址全都是 32 位长。 指针所指向的内存区就是
//组,然后与 int 结合,说明数组里的元素是整
//型的,所以 P 是一个由整型数据组成的数组
int *p[3]; //首先从 P 处开始,先与[]结合,因为其优先级
//比*高,所以 P 是一个数组,然后再与*结合,说明
//数组里的元素是指针类型,然后再与 int 结合,
//说明指针所指向的内容的类型是整型的,所以
int **p; //首先从 P 开始,先与*结合,说是 P 是一个指针,然 //后再与*结合,说明指针所指向的元素是指针,然 //后再与 int 结合,说明该指针所指向的元素是整 //型数据.由于二级指针以及更高级的指针极少用 //在复杂的类型中,所以后面更复杂的类型我们就 //不考虑多级指针了,最多只考虑一级指针.
在指针的算术运算中,指针所指向的类型有很大的作用。
合集下载

C语言指针的长度和类型详解

C语言指针的长度和类型详解

C语言指针的长度和类型详解C语言指针的长度和类型详解指针是C语言的精髓,以下是店铺搜索整理的关于C语言指针的长度和类型详解,对于初学者深入理解C语言程序设计有很好的参考价值,有需要的朋友可以参考一下!想了解更多相关信息请持续关注我们店铺!一般来说,如果考虑应用程序的兼容性和可移植性,指针的长度就是一个问题,在大部分现代平台上,数据指针的长度通常是一样的,与指针类型无关,尽管C标准没有规定所有类型指针的长度相同,但是通常实际情况就是这样。

但是函数指针长度可能与数据指针的长度不同。

指针的长度取决于使用的机器和编译器,例如:在现代windows 上,指针是32位或是64位长测试代码如下:#include<stdio.h>#include<math.h>#include<stdlib.h>#include<stddef.h>struct p{int n;float f;};int main(){struct p *sptr;printf("sizeof *char: %d ", sizeof(char*));printf("sizeof *int: %d ", sizeof(int*));printf("sizeof *float: %d ", sizeof(float*));printf("sizeof *double: %d ", sizeof(double*));printf("sizeof *struct: %d ", sizeof(sptr));return 0;}运行结果如下图所示:指针相关的预定义类型:① size_t:用于安全地表示长度② ptrdiff_t:用于处理指针算术运算③ intptr_t:用于存储指针地址④ uintptr_t:用于存储指针地址分述如下:一、size_t类型size_t 类型是标准C库中定义的,应为unsigned int,在64位系统中为long unsigned int。

C语言指针详解

C语言指针详解

C语言指针详解2008-05-08 22:45第一章。

指针的概念指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。

要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。

让我们分别说明。

先声明几个指针放着做例子:例一:(1)int *ptr;(2)char *ptr;(3)int **ptr;(4)int (*ptr)[3];(5)int *(*ptr)[4];如果看不懂后几个例子的话,请参阅我前段时间贴出的文章 < <如何理解c和c++的复杂类型声明>>。

1。

指针的类型。

从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。

这是指针本身所具有的类型。

让我们看看例一中各个指针的类型:(1)int *ptr; //指针的类型是int *(2)char *ptr; //指针的类型是char *(3)int **ptr; //指针的类型是 int **(4)int (*ptr)[3]; //指针的类型是 int(*)[3](5)int *(*ptr)[4]; //指针的类型是 int *(*)[4]怎么样?找出指针的类型的方法是不是很简单?2。

指针所指向的类型。

当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。

从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。

例如:(1)int *ptr; //指针所指向的类型是int(2)char *ptr; //指针所指向的的类型是char(3)int **ptr; //指针所指向的的类型是 int *(4)int (*ptr)[3]; //指针所指向的的类型是 int()[3](5)int *(*ptr)[4]; //指针所指向的的类型是 int *()[4]在指针的算术运算中,指针所指向的类型有很大的作用。

全的C语言指针详解PPT课件

全的C语言指针详解PPT课件

在函数中使用指针参数
03
使用指针参数来访问和修改指针所指向的内容,需要使用“-
>”或“*”运算符。
05
指针的高级应用
指向指针的指针(二级指针)
定义与声明
二级指针是用来存储另一个指 针的地址的指针。在声明时, 需要使用`*`操作符来声明二级
指针。
初始化与使用
通过使用`&`操作符获取一个指 针的地址,并将该地址存储在 二级指针中。然后,可以通过 二级指针来访问和操作原始指
当使用malloc或calloc等函 数动态分配内存后,如果 不再需要该内存,必须使 用free函数释放它。否则, 指针将指向一个无效的内 存地址。
当一个指针在函数中定义 ,但该函数返回后仍然存 在并继续指向无效的内存 地址时,就会产生野指针 。
避免指针越界访问
总结词:指针越界访问是指试图访问数 组之外的内存,这是不安全的,可能会 导致程序崩溃或产生不可预测的结果。
指针与内存分配
通过指针来访问和操作动态分配的内存空间。指针可以 存储动态分配的内存地址,并用于读取和写入该地址中 的数据。
指向结构体的指针
01
定义与声明
指向结构体的指针是指向结构体类型的指针。在声明时,需要使用结
构体类型的名称来声明指向结构体的指针。
02 03
初始化与使用
通过使用`&`操作符获取结构体的地址,并将该地址存储在指向结构 体的指针中。然后,可以通过该指针来访问和操作结构体中的成员变 量。
```
பைடு நூலகம்
指向数组元素的指针
• 指向数组元素的指针是指向数组中某个具体元素的指针。通过将指针指向数组中的某个元素,可以访问该 元素的值。
• 指向数组元素的指针可以通过定义一个指向具体元素的指针来实现。例如,定义一个指向数组中第三个元 素的指针,可以使用以下代码

C语言指针教学中的知识点分析与总结-最新教育文档

C语言指针教学中的知识点分析与总结-最新教育文档

C语言指针教学中的知识点分析与总结C语言是一门重要的计算机基础课程,指针是C语言的精华。

而指针应用范围广、使用灵活等特点时常让初学者感到困惑。

用指针可以访问各种类型的数据,能够实现动态存储分配,提高编程效率,加深对数据存储方式的理解。

本文从指针的基本概念,指针在数组、函数、字符串、动态存储分配等方面的应用入手,剖析指针与各部分基础知识相结合时的教学重点和难点。

利用对比的方法指出初学者在学习指针过程中易混的概念及注意事项,有利于初学者对指针的理解和掌握。

1指针基本概念的理解指针学习首先应掌握其基本概念。

指针即地址、地址即指针。

程序运行过程中,变量、数组、函数等都存放在内存的存储单元中,每个存储单元都有地址。

使用变量、数组、函数既可以直接访问,又可以利用其存储单元地址进行间接访问,这种间接访问便是借助指针来完成的。

1.1对指针类型的理解理解指针概念要从指针类型入手,教师在教学中应着重讲述指针类型的含义,以及与普通变量类型的区别。

指针定义时的类型称为指针的基础类型,理解上应区别于普通变量的类型。

如定义:由上表可以看出,普通变量的数据类型决定了其占用内存单元的字节数以及存放数值的范围。

而指针变量不论其基础类型为何种类型,均占用4 个字节的存储空间。

并且指针变量与普通变量最大的区别在于,指针变量存地址值,而普通变量存数值。

1.2指针运算符的理解1.2.1对取地址符“ &”的理解指针变量定义后应为其赋一个有效地址值,让它指向有效的存储空间。

未赋值的指针变量称为“悬空”指针,使用悬空指针非常危险,可能会导致系统崩溃。

为指针变量赋值时常要用到取地址运算符“ &”。

令初学者常常感到困惑的是分不清赋值号左右两侧的数据类型是否匹配。

图1 所示为指针变量正确的赋值关系。

1.2.2对取内容符“ * ”的理解取内容符“ * ”又称间接运算符。

当指针指向某存储单元后,利用指针访问该存储单元的内容便要用到取内容符。

C语言指针详细讲解

C语言指针详细讲解

类型转换错误
01 总结词
类型转换错误是指试图将一个类型的指针 转换为另一个类型,导致程序崩溃或未定 义行为。
02 详细描述
类型转换错误通常发生在以下情况
03
1. 强制类型转换
04
强制类型转换是一种不安全的操作,它可能 会导致内存访问错误或程序崩溃。例如,将 一个int类型的指针强制转换为char类型的 指针,然后试图访问该地址,可能会导致程 序崩溃。
指向void的指针的使用
01
什么是指向void的指针
指向void的指针是一个特殊类型的指针,它可以指向任何类型的数据,
但是不能直接对其进行操作。
02
为何使用指向void的指针
使用指向void的指针可以在不知道指针所指向的数据类型的情况下,传
递数据或函数的参数。
03
如何使用指向void的指针
在C语言中,可以使用void关键字定义一个指向void的指针。例如:
3
在C语言中,指针变量通常用"*"表示其类型。
指针的类型
指针的类型取决于它所指向的变量的类型。 如果指针指向一个浮点数,则该指针的类型为float *。
如果指针指向一个整数,则该指针的类型为int *。 如果指针指向一个字符,则该指针的类型为char *。
指针的变量
指针变量可以声明为任何类型,包括int 、float、char等。
c语言指针详细讲解
汇报人: 日期:
目 录
• c语言指针基本概念 • c语言指针的运算 • c语言指针与数组 • c语言指针与函数 • c语言指针的使用技巧与注意事项 • c语言指针常见错误分析
01
c语言指针基本概念
指针的定义

C语言实用学习中的指针用法教程

C语言实用学习中的指针用法教程

C语言学习中的指针用法教程对于C语言初学者来说,需要明白指针是啥?重点就在一个“指”上。

指啥?指的地址。

啥地址?内存的地址。

上面说明就是指针的本质了。

这里再详细解释下。

数据存起来是要存在内存里面的,就是在内存里圈出一块地,在这块地里放想放的东西。

变量关心的是这块地里放的东西,并不关心它在内存的哪里圈的地;而指针则关心这块地在内存的哪个地方,并不关心这块地多大,里面存了什么东西。

指针怎么用呢?下面就是基本用法:int a, b, c;double f;int *pt_a = a, *pt_b = b, *pt_c = c;double *pt_f = f;上面两行声明了三个int类型的变量a,b,c,一个double 类型的变量f。

下面就是指针的用法了,声明变量的时候只需要在变量前面加上“*”这个符号就说明了这个变量是指针,而前面的“int”说明指针指向的内存里面存放着int类型的变量。

变量和指针的声明也可以放到一起:int a, b, c;double f;int other, *pt_a = a, *pt_b = b, *pt_c = c;double x = 0, *pt_f = f;然后就是新的运算符——“”了。

是不是很熟悉?没错,这个就是scanf里面的那个“”。

它是取地址符,即用在变量前面使用这个运算符,能够获得这个变量在内存里面的地址。

由此就可以解释scanf双引号后面为何要使用“”了,就是将前面按照格式读进来的数据,按照后面给出的地址直接填进内存里,所以scanf 双引号后面提供的参数实质上并不是希望赋值的变量,而是希望保存数据的地址。

所以,例如如果有int类型的变量a,同时有指向它的指针pt,那么下面两句是等效的:scanf(%d, a);scanf(%d, pt);回到指针,接下来就是修改指针指向变量的值了,怎么弄呢?下面就是例子:int a;int *pt = a;*pt = 123; // 该语句等同于a = 123;不要把“*”给忘了哈。

C语言指针详解

C语言指针详解1 程序如何运行当我们打开电脑中的任何一个程序运行时,我们的操作系统会将该程序存在硬盘的所有数据装载到内存中,然后有CPU 进行读取内存中的数据并进行计算,并将计算的结果返回给我们的操作系统,然后操作系统将相应的动作交付给相应的硬件来完成。

如:将声音数据交给声卡,最后有音响输出来,将图像交给显卡最后有显示器输出……但是还会有一部分数据会返回给内存,以供程序下面的语句继续使用。

我们都知道内存的容量有很大,如:4G,8G, 16G,有时候我们会打开很多的程序,所有的程序的数据都存放到我们的内存中,那么CPU是如何正确的读取我们的不同程序的数据并加以计算的哪?2 内存的假设设计为了让我们的CPU 可以很好的读取内存中的数据,内存必须做优化设计,于是给内存设定了集合设计,将我们的内存分成很多大小相同的方格(盒子),所有的数据将放入这些小盒子中,将不同的程序的数据放入到不同的小盒子中,这样就出现的模块化的内存,当我执行程序的一个命令时,CPU就会从相应的盒子读数据然后计算,由于我们硬件所能访问或计算的最小单位是字节,所以内存中的这样的一个小盒子的大小就给他规定一个字节。

3 地址和指针一般我们声明一块内存空间的时候,会给他取一个名字,为的是我们在编写程序的时候方便使用空间中存放的值,但是CPU 读数据的时候会忽视这个名字,因为CPU无法理解这样的数据,CPU 只能执行0,1代码,那么CPU是如何知道从什么地方读取数据,又到什么地方地址数据的读取的那,所以必须对内存做2次设计,就是将内存中分成的很多小盒子下面标注一些顺序的序号,例如:从第一个盒子开始,标注1,2,3,4,5,6,7,……每一个数字对应一个盒子,但是真正的内存如中不是使用这些十进制数字的,而是使用16进制整数表示的,如0x16ffee。

这些我们标记的数字就叫做内存中的地址。

由于这些地址和盒子是对应的关系,所以只要知道了地址,就可以得到对应盒子中存放的数据了,形象的说,我们说这个地址指向对应的盒子,在C语言中可以通过地址得到对应盒子的数据是*地址。

C语言基础知识函数指针指针函数(定义格式作用及用法说明)

C语言基础知识函数指针指针函数(定义格式作用及用法说明)函数指针和指针函数是C语言中的两个概念。

1.函数指针:函数指针是指向函数的指针变量。

即函数的地址可以赋给指针变量,使指针变量指向函数。

声明函数指针的一般形式为:返回值类型(*指针变量名)(参数列表)。

其中,指针变量名用于存储函数的地址。

函数指针的作用和用法:-回调函数:函数指针常用于回调函数的实现。

回调函数是指当一些事件发生时,调用预先注册好的函数来处理该事件。

-函数指针数组:函数指针可以存储多个函数的地址,通过数组的形式可以实现函数指针的集合。

-函数指针作为参数:函数指针可以作为函数的参数传递,实现函数的灵活调用。

函数指针的定义格式如下:```c返回值类型(*指针变量名)(参数列表);```示例代码:```c#include <stdio.h>int add(int a, int b)return a + b;int subtract(int a, int b)return a - b;int maiint (*p)(int, int); // 声明函数指针变量pp = add; // 函数add的地址赋给pint result = p(3, 4); // 调用函数指针p,相当于调用了add函数printf("Result: %d\n", result); // Output: Result: 7p = subtract; // 函数subtract的地址赋给presult = p(8, 5); // 调用函数指针p,相当于调用了subtract函数printf("Result: %d\n", result); // Output: Result: 3return 0;```2.指针函数:指针函数是指返回值是指针类型的函数。

即函数可以返回指向其中一种类型的指针。

指针函数的声明形式为:返回值类型*函数名(参数列表)。

C语言指针用法详解

C语言指针用法详解C语言指针用法详解指针可以说是集C语言精华之所在,一个C语言达人怎么可以不会指针呢。

下面店铺给大家介绍C语言指针用法,欢迎阅读!C语言指针用法详解(1)关于指针与数组的存储a、指针和数组在内存中的存储形式数组p[N]创建时,对应着内存中一个数组空间的分配,其地址和容量在数组生命周期内一般不可改变。

数组名p本身是一个常量,即分配数组空间的地址值,这个值在编译时会替换成一个常数,在运行时没有任何内存空间来存储这个值,它和数组长度一起存在于代码中(应该是符号表中),在链接时已经制定好了;而指针*p创建时,对应内存中这个指针变量的空间分配,至于这个空间内填什么值即这个指针变量的值是多少,要看它在程序中被如何初始化,这也决定了指针指向哪一块内存地址。

b、指针和数组的赋值与初始化根据上文,一般情况下,数组的地址不能修改,内容可以修改;而指针的内容可以修改,指针指向的内容也可以修改,但这之前要为指针初始化。

如:int p[5];p=p+1; 是不允许的而p[0]=1; 是可以的;//int *p;p=p+1; 是允许的p[0]=1; 是不允许的,因为指针没有初始化;//int i;int *p=&i;p[0]=1; 是允许的;对于字符指针还有比较特殊的情况。

如:char * p="abc";p[0]='d'; 是不允许的为什么初始化了的字符指针不能改变其指向的内容呢?这是因为p 指向的是“常量”字符串,字符串"abc"实际是存储在程序的静态存储区的,因此内容不能改变。

这里常量字符串的地址确定在先,将指针指向其在后。

而char p[]="abc";p[0]='d'; 是允许的这是因为,这个初始化实际上是把常量直接赋值给数组,即写到为数组分配的内存空间。

这里数组内存分配在先,赋值在后。

(2)关于一些表达式的含义char *p, **p, ***p;char p[],p[][],p[][][];char *p[],*p[][],**p[],**p[][],*(*p)[],(**p)[],(**p)[][];能清晰地知道以上表达式的含义吗?(知道的去死!)第一组:char *p, **p, ***p;分别为char指针;char*指针,即指向char*类型数据地址的指针;char**指针,即指向char**类型数据的指针;他们都是占4字节空间的指针。

指向指针的指针——彻底搞定C指针

指向指针的指针——彻底搞定C指针彻底搞定C指针---指向指针的指针彻底搞定C指针---指向指针的指针一( 回顾指针概念:今天我们又要学习一个叫做指向另一指针地址的指针。

让我们先回顾一下指针的概念吧~当我们程序如下申明变量:short int i;char a;short int * pi;程序会在内存某地址空间上为各变量开辟空间,如下图所示。

内存地址?6 7 8 9 10 11 12 13 14 15 ------------------------------------------------------------------------------------- … | | | | | | | | | | -------------------------------------------------------------------------------------|short int i |char a| |short int * pi|图中所示中可看出:i 变量在内存地址5的位置,占两个字节。

a变量在内存地址7的位置,占一个字节。

pi变量在内存地址9的位置,占两个字节。

(注:pi 是指针,我这里指针的宽度只有两个字节,32位系统是四个字节)接下来如下赋值:i=50;pi=&i;经过上在两句的赋值,变量的内存映象如下:内存地址?6 7 8 9 10 11 12 13 14 15 -------------------------------------------------------------------------------------- … | 50 | | | 6 | | | |--------------------------------------------------------------------------------------|short int i |char a| |short int * pi|看到没有:短整型指针变量pi的值为6,它就是I变量的内存起始地址。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档