C++程序设计-郑莉第四版(第6章).ppt

上传人:tia****nde 文档编号:7738242 上传时间:2020-03-24 格式:PPT 页数:98 大小:699.50KB
返回 下载 相关 举报
C++程序设计-郑莉第四版(第6章).ppt_第1页
第1页 / 共98页
C++程序设计-郑莉第四版(第6章).ppt_第2页
第2页 / 共98页
C++程序设计-郑莉第四版(第6章).ppt_第3页
第3页 / 共98页
点击查看更多>>
资源描述
1 第六章数组指针与字符串 C 语言程序设计 2 本章主要内容 数组指针指针与数组指针与函数动态存储分配字符串 3 数组的概念 数组是具有一定顺序关系的若干相同类型变量的集合体 组成数组的变量称为该数组的元素 因此当需要多个同类型变量时就要考虑定义数组 数组 4 数组的说明与使用 数组的声明一般形式 类型说明符标识符 常量表达式1 例如 inta 10 表示a为整型数组 有10个元素 a 0 a 9 数组 引用必须先声明 后使用 只能逐个引用数组元素 而不能一次引用整个数组例如 a 0 a 5 a 7 a 2 3 5 数组的说明与使用 数组 数组的使用使用数组时 只能分别对数组的各个元素进行操作 数组的元素是由下标来区分的 对于一个已经声明过的数组 其元素的使用形式为 数组名 下标表达式1 下标表达式2 使用数组注意 1 数组元素的下标表达式可以是任意合法的算术表达式 其结果必须为整型数 2 数组元素的下标值不得超过声明时所规定的上下界 否则运行时数组越界错误 6 例 给出下面程序的输出结果 includeintcount 5 1 2 voidmain inti charc hello for i 0 i 4 i cout count i endl cout c endl cout sizeof c endl cout count endl cout sizeof count endl cout sizeof count sizeof int endl 运行结果为 1 count 0 2 count 1 0 count 2 0 count 3 0 count 5 hello 输出字符串c7 字符串c长度为70 x00408040 数组count首地址20 数组count占总字节数5 数组count元素个数 7 一维数组的存储顺序 数组元素在内存中顺次存放 它们的地址是连续的 例如 具有10个元素的数组a 在内存中的存放次序如下 数组名字是数组首元素的内存地址 数组名是一个常量 不能被赋值 数组 8 一维数组的初始化 可以在编译阶段使数组得到初值 在声明数组时对数组元素赋以初值 可以只给一部分元素赋初值 在对全部数组元素赋初值时 可以不指定数组长度 数组 例如 staticinta 10 0 1 2 3 4 5 6 7 8 9 例如 staticinta 10 0 1 2 3 4 例如 staticinta 1 2 3 4 5 9 二维数组的声明及引用 数据类型标识符 常量表达式1 常量表达式2 例 inta 5 3 表示a为整型二维数组 其中第一维有5个下标 0 4 第二维有3个下标 0 2 数组的元素个数为15 可以用于存放5行3列的整型数据表格 数组 存储顺序按行存放 上例中数组a的存储顺序为 二维数组的声明类型说明符数组名 常量表达式 常量表达式 例如 floata 3 4 引用例如 b 1 2 a 2 3 2 下标不要越界 二维数组的声明及引用 数组 分行给二维数组赋初值例如 staticinta 3 4 1 2 3 4 5 6 7 8 9 10 11 12 将所有数据写在一个 内 按顺序赋值例如 staticinta 3 4 1 2 3 4 5 6 7 8 9 10 11 12 可以对部分元素赋初值例如 staticinta 3 4 1 0 6 0 0 11 二维数组的初始化 数组 12 数组作为函数参数 数组元素作实参 与单个变量一样 数组名作参数 形 实参数都应是数组名 类型要一样 传送的是数组首地址 对形参数组的改变会直接影响到实参数组 数组 13 例6 2使用数组名作为函数参数 例 主函数中初始化一个矩阵并将每个元素都输出 然后调用子函数 分别计算每一行的元素之和 将和直接存放在每行的第一个元素中 返回主函数之后输出各行元素的和 数组 includevoidRowSum intA 4 intnrow intsum for inti 0 i nrow i sum 0 for intj 0 j 4 j sum A i j cout Sumofrow i is sum endl voidmain void intTable 3 4 1 2 3 4 2 3 4 5 3 4 5 6 for inti 0 i 3 i for intj 0 j 4 j cout Table i j cout endl RowSum Table 3 运行结果 123423453456Sumofrow0is10Sumofrow1is14Sumofrow2is18 17 对象数组 声明 类名数组名 元素个数 访问方法 通过下标访问数组名 下标 成员名 数组 18 对象数组初始化 数组中每一个元素对象被创建时 系统都会调用类构造函数初始化该对象 通过初始化列表赋值 例 PointA 2 Point 1 2 Point 3 4 如果没有为数组元素指定显式初始值 数组元素便使用缺省值初始化 调用缺省构造函数 数组 19 数组元素所属类的构造函数 不声明构造函数 则采用缺省构造函数 各元素对象的初值要求为相同的值时 可以声明具有缺省形参值的构造函数 各元素对象的初值要求为不同的值时 需要声明带形参 无缺省值 的构造函数 当数组中每一个对象被删除时 系统都要调用一次析构函数 数组 20 例6 3对象数组应用举例 Point h ifndef POINT H define POINT HclassPoint public Point Point intxx intyy Point voidMove intnewX intnewY intGetX returnx intGetY returny staticvoidshowCount private intx y endif 数组 Point cpp include include Point h usingnamespacestd Point Point x y 0 cout DefaultConstructorcalled endl Point Point intx inty x x y y cout Constructorcalled endl Point Point cout Destructorcalled endl voidPoint Move intnewX intnewY cout Movingthepointto newX newY endl x newX y newY 6 3 cpp include Point h includeusingnamespacestd intmain cout Enteringmain endl Pointa 2 for inti 0 i 2 i a i Move i 10 i 20 cout Exitingmain endl return0 运行结果 Enteringmain DefaultConstructorcalled DefaultConstructorcalled Movingthepointto 10 20 Movingthepointto 11 21 Exitingmain Destructorcalled Destructorcalled 25 关于内存地址 内存空间的访问方式通过变量名访问通过地址访问地址运算符 则 var表示变量var在内存中的起始地址 指针 26 声明例 staticinti staticint i pointer 指向整型变量的指针 指针变量的概念 概念指针 另一个变量的地址 用于间接访问变量指针变量 用于存放地址的变量 引用例1 i 3 例2 i pointer 3 指针 27 与地址相关的运算 和 指针运算符 表示指针所指向的变量的值 指针 28 与地址相关的运算 和 如果已经执行了inta b int point 1 point 2 point 1 1 point 1的含义 2 a的含义 指针 2 a与 point 1的作用是一样的 它们等价于变量a 即 a与a等价 29 指针变量的初始化 语法形式存储类型数据类型 指针名 初始地址 例 int pa 指针 注 存储类型是指数据在内存中存储的方式 分为两类 静态存储类和动态存储类 具体包含四种 自动的 auto 静态的 static 寄存器的 register 外部的 extern 自动的 auto 可以省略 注意事项 1 用变量地址作为初值时 该变量必须在指针初始化之前已说明过 且变量类型应与指针类型一致 2 可以用一个已赋初值的指针去初始化另一个指针变量 30 指针变量的赋值运算 指针名 地址 地址 中存放的数据类型与指针类型必须相符 向指针变量赋的值必须是地址常量或变量 不能是普通整数 但可以赋值为整数0 表示空指针 指针的类型是它所指向变量的类型 而不是指针本身数据值的类型 任何一个指针本身的数据值都是unsignedlongint型 允许声明指向void类型的指针 该指针可以被赋予任何类型对象的地址 例 void general 指针 31 例6 5指针的声明 赋值与使用 includeusingnamespacestd voidmain inti int ptr 指针 取i的地址赋给ptr 输出int型数的值 输出int型指针所指地址的内容 程序运行的结果是 i 10 ptr 10 33 几种特殊的指针类型 指针 1 可以声明指向常量的指针 此时不能通过指针来改变所指对象的值 但指针本身可以改变 可以指向另外的对象 例 P164例 intn1 3 intconstn2 5 constint pn 正确 错误 34 指针 2 可以声明指针类型的常量 这时指针本身的值不能被改变 例 P164例 intn1 3 intconstn2 5 int constpn 正确 35 例6 6void类型指针的使用voidmain voidvodObject 错 不能声明void类型的变量void pv 对 可以声明void类型的指针inti 5 pv 指针 void类型指针指向整型变量 void指针赋值给int指针需要类型强制转换 3 一般情况下 指针的值只能赋给相同类型的指针 但是有一种特殊的void类型指针 可以存储任何类型的对象地址 36 指针运算 指针与整数的加减运算指针p加上或减去n 其意义是指针当前指向位置的前方或后方第n个数据的地址 这种运算的结果值取决于指针指向的数据类型 指针 37 指针变量的算术运算 指针加一 减一运算指向下一个或前一个数据 例如 y px 相当于y px 相当于y px px 指针 后置 运算符优先级高于 详细分析 px 相当于 px 但 px 的值为px 因而 与px结合成 px 继续运算将 px的值赋值给y 表达式运算结束后 再为px值增1 pa pb 1 pb pb 1 pb 2 pb 1 pb pb 1 pb 2 long pb 40 关系运算指向相同类型数据的指针之间可以进行各种关系运算 指向不同数据类型的指针 以及指针与一般整数变量之间的关系运算是无意义的 指针可以和零之间进行等于或不等于的关系运算 例如 p 0或p 0赋值运算向指针变量赋的值必须是地址常量或变量 不能是普通整数 但可以赋值为整数0 表示空指针 指针变量的关系运算 指针 41 用指针处理数组元素 声明与赋值例 inta 6 10 20 30 40 50 60 pa pa 当指针变量指向该数组后可以通过指针引用数组元素 指针 42 由此可见如下的等价关系成立 pa a a 0 表示数组元素的首地址pa i a i a i 表示第i 1个数组元素的地址 pa i a i a i 表示第i 1数组元素 指针 访问数组元素的三种方式 1 下标方式形式 数组名 下标 2 地址方式形式 地址 3 指针方式形式 指针变量 注意 1 pa与a的区别 两者同样是表示数组a的地址 但本质不同 pa是变量 而a是常量 所以对pa进行pa pa 等赋值运算 改变pa的值 但不能对a进行a a 等赋值运算 43 注意 2 pa 与 pa 区别 pa 的 运算符作用于指针变量 即取指针所指对象的值后 再对指针进行 运算 改变的是指针变量的值 而 pa 的 运算符作用于指针变量所指对象 即取指针所指对象的值 加1后再赋值给对象 指针 44 例6 7 设有一个int型数组a 有10个元素 用三种方法输出各元素 使用数组名和下标使用数组名和指针运算使用指针变量 指针 main inta 10 inti for i 0 i a i cout endl for i 0 i 10 i cout a i 使用数组名和下标 main inta 10 inti for i 0 i a i cout endl for i 0 i 10 i cout a i 使用数组名指针运算 使用指针变量 main inta 10 int p i for i 0 i a i cout endl for p a p a 10 p cout p 48 指针数组 数组的每个元素是指针变量 这个数组就是指针数组 指针数组的每个元素都是同一类型的指针声明一维指针数组的语法形式 类型名 数组名 下标表达式 例 int p i 3 指针 声明了一个int型指针数组p i 数组有3个元素 每个元素都是一个指向int型数据的指针 49 例6 8利用指针数组输出单位矩阵 includevoidmain intline1 1 0 0 声明数组 矩阵的第一行intline2 0 1 0 声明数组 矩阵的第二行intline3 0 0 1 声明数组 矩阵的第三行int p line 3 声明整型指针数组p line 0 line1 初始化指针数组元素p line 1 line2 p line 2 line3 指针 输出单位矩阵cout Matrixtest endl for inti 0 i 3 i 对指针数组元素循环 for intj 0 j 3 j 对矩阵每一行循环 cout p line i j cout endl 输出结果为 Matrixtest 1 0 00 1 00 0 1 51 例6 9二维数组举例 includevoidmain intarray2 2 3 11 12 13 21 22 23 for inti 0 i 2 i cout array2 i endl for intj 0 j 3 j cout array2 i j cout endl 指针 52 用指针作为函数参数 如果以指针作为形参 在调用时实参将值传递给形参 使得指针变量指向同一内存地址 这样在子函数运行过程中 对形参指针所指变量值的改变也同时影响实参指针所指向的变量的值 指针作为函数的形参有三个作用 P209 了解 指针与函数 53 指针做函数参数举例 例6 10 读入三个浮点数 将整数部分和小数部分分别输出 includeusingnamespacestd voidsplitfloat floatx int intpart float fracpart 形参intpart fracpart是指针 intpart static cast x 取x的整数部分 fracpart x intpart 取x的小数部分 voidmain void inti n floatx f cout x splitfloat x 指针与函数 54 运行结果 Enterthree 3 floatingpointnumbers4 7IntegerPartis4FractionPartis0 78 913IntegerPartis8FractionPartis0 913 4 7518IntegerPartis 4FractionPartis 0 7518 55 指针型函数 除了void类型的函数之外 函数在调用结束后都会有返回值 指针同样可以作为函数的返回值 当一个函数的返回值是指针类型时 这个函数就是指针型函数 通常非指针型函数调用结束后 可以返回一个变量或对象 但这样每次调用只能返回一个数据 而指针型函数在函数结束时把大量的数据从被调函数返回到主调函数中 指针与函数 指针型函数的一般定义形式 数据类型 函数名 参数表 函数体 56 例 includeint fun voidmain int p p fun while p 1 cout p endl int fun int h newint 4 h 0 1 h 1 2 h 2 3 h 3 1 returnh 57 含义 数据指针指向数据存储区 而函数指针指向的是程序代码存储区 实际上函数名就表示函数的代码在内存中的起始地址 指向函数的指针 指针与函数 注意 函数指针在使用之前也要进行赋值 使指针指向一个已经存在的函数代码的起始地址 一般语法为 函数指针名 函数名 P212例6 11 58 includeusingnamepsacestd voidprintStuff floatdata to ignore cout Thisistheprintstufffunction endl voidprintMessage floatlist this data cout Thedatatobelistedis list this data endl voidprintFloat floatdata to print cout Thedatatobeprintedis data to print endl 例6 11函数指针实例 59 constfloatPI 3 14159f constfloatTWO PI PI 2 0f intmain void function pointer float printStuff PI functionPointer printStuff 函数指针指向printStufffunctionPointer PI functionPointer printMessage 函数指针指向printMessagefunctionPointer TWO PI functionPointer 13 0 functionPointer printFloat 函数指针指向printFloatfunctionPointer PI printFloat PI return0 指针与函数 60 运行结果 Thisistheprintstufffunction Thisistheprintstufffunction Thedatatobelistedis6 28318Thedatatobelistedis13Thedatatobeprintedis3 14159Thedatatobeprintedis3 14159 61 对象指针 对象指针就是用来存放对象地址的变量 声明形式 类名 对象指针名 对象指针 例 PointA 5 10 声明Point类的对象APiont ptr 声明Point类的对象指针ptr 将对象A的地址赋给ptr 使ptr指向A 对象指针访问对象成员的语法形式 对象指针名 成员名 62 对象指针应用举例 注意 1 对象是包含了数据和函数两种成员 但对象所占据的内存空间只用于存放数据成员 2 对象指针在使用之前一定要先进行初始化 让它指向一个程序已经声明过的对象 然后再使用 通过对象指针 可以访问到所指对象的公有成员 对象指针 例 P213例6 12 intmain Pointa 4 5 Point pl 63 this指针 指针this是系统自动生成的 隐含于每一个类的非静态成员函数中的特殊指针 当一个对象生成以后 系统就为这个对象定义了一个this指针 它指向这个对象的地址 例如 Point类中函数getX 中语句ruturnx returnthis x 每一个非静态成员函数都有一个this指针 当对象调用成员函数时 该成员函数的this指针便指向这个对象 这样 当不同的对象调用同一个成员函数时 编译器将根据该成员函数的this指针指向的对象确定引用哪个对象的成员函数 成员函数访问类中数据成员的形式为 this 成员变量 对象指针 64 指向对象成员的指针使用前要先声明 再赋值 然后引用 声明形式为 类型说明符类名 指针名 类型说明符 类名 指针名 参数表 对数据成员指针赋值形式为 指针名 类名 数据成员名 注意 不能对类的私有成员取地址对函数成员指针赋值形式为 指针名 类名 函数成员名 指向类的非静态成员的指针 65 访问数据成员形式为 对象名 成员指针名 或对象名 成员指针名 访问函数成员时 由于需要确定this指针 因而必须通过对象来调用非静态成员函数 形式为 对象名 类成员指针名 参数表 对象名 成员指针名 参数表 指向类的非静态成员的指针 续 66 指向类的非静态成员的指针 对象指针 例 P216例6 13intmain Pointa 4 5 Point pl 67 对类的静态成员的访问不依赖于对象 因此可用普通指针来指向和访问静态成员 参见P216 218页例6 14和例6 15 指向类的静态成员的指针 68 includeusingnamespacestd classPoint public Point intx 0 inty 0 x x y y count Point Point 例6 14通过指针访问类的静态数据成员 69 private intx y intPoint count 0 静态数据成员 初始化intmain int ptr 70 includeusingnamespacestd classPoint public Point intx 0 inty 0 x x y y count Point Point 例6 15通过指针访问类的静态函数成员 71 private intx y staticintcount intPoint count 0 静态数据成员 初始化intmain void funcPtr Point showCount Pointa 4 5 cout PointA a getX a getY funcPtr Pointb a cout PointB b getX b getY funcPtr return0 72 动态申请内存操作符new 动态内存分配 堆对象 在程序运行过程中申请和释放的存储单元 该过程称为建立 new 和删除 delete new 在程序执行期间 申请用于存放T类型对象的内存空间 并依初值列表赋以初值 若成功 返回指向新分配的内存 否则 抛出异常new数据类型 初始化参数列表 int point point newint 2 区别 point newint 和point newint 区别 若类存在默认构造函数 new T和 newT 效果相同 否则 newT 会为基本数据类型和指针类型的成员用0赋初值 73 释放内存操作符delete delete指针名 功能 释放指针P所指向的内存 P必须是new操作的返回值 注意 若被删除的是对象 则其析构函数将被调用 对于用new建立的对象 只能使用delete进行一次删除操作 动态存储分配 74 例6 16动态创建对象 includeclassPoint public Point X Y 0 cout DefaultConstructorcalled n Point intxx intyy X xx Y yy cout Constructorcalled n Point cout Destructorcalled n intGetX returnX intGetY returnY voidMove intnewX intnewY x newX y newY private intx y 动态存储分配 75 intmain cout StepOne endl Point Ptr1 newPoint deletePtr1 cout StepTwo endl Ptr1 newPoint 1 2 deletePtr1 return0 运行结果 StepOne DefaultConstructorcalled Destructorcalled StepTwo Constructorcalled Destructorcalled 76 例6 17动态创建对象数组 includeusingnamespacestd classPoint 类的声明同例6 16 略 intmain Point Ptr newPoint 2 创建对象数组Ptr 0 Move 5 10 通过指针访问数组元素的成员Ptr 1 Move 15 20 通过指针访问数组元素的成员cout Deleting endl delete Ptr 删除整个对象数组return0 动态存储分配 77 运行结果 DefaultConstructorcalled DefaultConstructorcalled Deleting Destructorcalled Destructorcalled 78 利用动态内存分配操作可实现数组的动态创建 另一种更好的方法是将数组的建立和删除过程封装起来 形成动态数组类动态数组中 为防止访问数组时下标越界 应使用断言assert 包含在头文件cassert中 当assert判断为假 则程序中止 79 例6 18动态数组类 include includeusingnamespacestd classPoint 类的声明同例6 16 略 动态数组类classArrayOfPoints public ArrayOfPoints intsize size size points newPoint size ArrayOfPoints cout 0 80 intmain intcount cout count ArrayOfPointspoints count points element 0 move 5 0 points element 1 move 15 20 return0 运行结果 Pleaseenterthecountofpoints 2DefaultConstructorcalled DefaultConstructorcalled Deleting Destructorcalled Destructorcalled 81 动态分配数组时应注意 用new创建多维数组 new类型名T 下标表达式1 下标表达式2 如果内存申请成功 new运算返回一个指向新分配内存首地址的指针 是一个T类型的数组 例如 char fp 3 fp newchar 2 3 82 char fp 3 fp fp 1 83 例6 18动态创建多维数组 includevoidmain float cp 9 8 inti j k cp newfloat 8 9 8 for i 0 i 8 i for j 0 j 9 j for k 0 k 9 k cp i j k i 100 j 10 k 通过指针访问数组元素 动态存储分配 84 for i 0 i 8 i for j 0 j 9 j for k 0 k 8 k 将指针cp作为数组名使用 通过数组名和下标访问数组元素cout cp i j k cout endl cout endl 85 动态存储分配函数 c语言 void malloc size 参数size 欲分配的字节数返回值 成功 则返回void型指针 失败 则返回空指针 头文件 和 动态存储分配 86 动态内存释放函数 c语言 voidfree void memblock 参数memblock 指针 指向需释放的内存 返回值 无头文件 和 动态存储分配 87 用vector创建数组对象 C 标准库提供了被封装的动态数组 vector 且具有各种类型vector是一个类模板 使用形式为 vector数组对象名 数组长度 例如 intx 10 vectorarr x 用vector定义的数组对象的所有元素都会被初始化 若元素为基本数据类型 则以0初始化 若元素为类类型 则调用类的默认构造函数初始化 88 当为元素指定初值时 则所有元素具有相同初值 形式为 vector数组对象名 数组长度 元素初值 vector数组对象元素与普通数组元素具有相同的访问形式 数组对象名 下标表达式 vector数组对象是封装了数组的对象 对象名表示一个数组对象 而非数组的首地址vector数组对象的成员函数size 的作用是返回数组的大小 89 例6 20vector应用举例 include includeusingnamespacestd doubleaverage constvector intmain unsignedn cout n vectorarr n cout arr i cout Average average arr endl return0 90 include includeusingnamespacestd classPoint 类的声明同例6 16 略 classArrayOfPoints 类的声明同例6 18 略 intmain intcount cout count ArrayOfPointspointsArray1 count pointsArray1 element 0 move 5 10 pointsArray1 element 1 move 15 20 例6 21对象的浅复制 深复制与浅复制 91 ArrayOfPointspointsArray2 pointsArray1 cout copyofpointsArray1 endl cout point 0ofarray2 pointsArray2 element 0 getX pointsArray2 element 0 getY endl cout point 1ofarray2 pointsArray2 element 1 getX pointsArray2 element 1 getY endl pointsArray1 element 0 move 25 30 pointsArray1 element 1 move 35 40 cout AfterthemovingofpointsArray1 endl cout point 0ofarray2 pointsArray2 element 0 getX pointsArray2 element 0 getY endl cout point 1ofarray2 pointsArray2 element 1 getX pointsArray2 element 1 getY endl ruturn0 例6 21对象的浅复制 续 深复制与浅复制 根据P227页的运行结果 发现当移动pointsArray1中的点后 pointsArray2中的点也被移动 这是与预期不相符的 原因是只是浅复制 参见P222页ArrayPoints类的定义和P228页图6 11 92 include includeusingnamespacestd classPoint 类的声明同例6 16 略 classArrayOfPoints public ArrayOfPoints constArrayOfPoints intmain 同例6 21 例6 22对象的深复制 深复制与浅复制 根据P229页的运行结果 发现当移动pointsArray1中的点不再影响pointsArray2中的点 原因是深复制 参见P222页ArrayPoints类的定义 P110页深复制的定义和P229页图6 12 93 字符串以 0 作为结尾标记可将字符串常量赋值给指向常量的指针 constchar STRING1 Thisisastring cout STRING1 以下三种写法等价 charstr 8 p r o g r a m 0 charstr 8 program charstr program 当使用字符串处理函数时 应包含头文件cstring 字符串 用字符数组存储和处理字符串 94 字符串处理函数 strcat 连接 strcpy 复制 strcmp 比较 strlen 求长度 strlwr 转换为小写 strupr 转换为大写 头文件 字符串 95 构造函数的原型string string conststring 字符串 string类 96 string类的操作符 参见P231页表6 1 操作符重载 常用成员函数介绍 参见P232页 append assign insert substr find length swap 字符串 string类 续 97 include includeusingnamespacestd 根据value的值输出true或false title为提示文字inlinevoidtest constchar title boolvalue cout title returns value true false endl intmain strings1 DEF cout s1is s1 endl 例6 23string类应用举例 字符串 98 strings2 cout s2 cout lengthofs2 s2 length endl 比较运算符的测试test s1 ABC s1 ABC test DEF s1 DEF s1 连接运算符的测试s2 s1 cout s2 s2 s1 s2 endl cout lengthofs2 s2 length endl return0 字符串
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!