南邮吴江职业技术学院16

上传人:yx****d 文档编号:243355881 上传时间:2024-09-21 格式:PPT 页数:28 大小:289.50KB
返回 下载 相关 举报
南邮吴江职业技术学院16_第1页
第1页 / 共28页
南邮吴江职业技术学院16_第2页
第2页 / 共28页
南邮吴江职业技术学院16_第3页
第3页 / 共28页
点击查看更多>>
资源描述
*,wjxy,南邮吴江职业技术学院,第 十 章,指 针,1,一、指针在程序中的用途,二、地址和指针的概念,三、变量的指针和指针变量,四、数组与指针,五、字符串与指针,六、,返回指针值的函数,主要内容:,2,一、指针在程序中的用途,有效的表示复杂的数据结构,能动态分配内存,方便的使用字符串,直接处理内存地址,总之,指针的应用,使程序简洁、紧凑、高效。,3,二、指针的概念,1.数据在内存中的存储、读取过程,例如:整型变量 i , j , k ; 在编译时为变量分配内存,内存示意图如图 1 所示.,(2) 给变量赋值为 i=3; j=6; k=9;,(1) 假设变量 i,j,k 被分配的 内存地址分别为,2000,2002,2004,(3) 通常,在程序中通过变量名对变量 进行存取。,2000,2002,2004,变量i,变量j,变量k,内存中用户数据区,。,。,3,6,9,2000,3010,内存地址编号,变量 p,其实程序经过编译后已将变量名转换为变量的地址,对变量值的存取都是通过,变量的地址,进行的。,图1,4,(1) 直接访问方式,按变量地址存取变量值的方式。,如果读取变量 i的值,直接到为变量i分配的存储单元(2000、2001字节)中取出i的值(3)即可。,(2) 间接访问方式,先将变量 i 的地址存放在另一个变量p中,如果读取变量 i的值,先找到变量p,从p中取出内容(2000,即变量i的起始地址),然后到2000、2001字节中取出i的值(3)。,即通过变量p访问为变量i分配的内存单元。,访问变量的两种方式:,5,直接访问示意图,间接访问示意图,表示将数值3送到变量i中,可有两种表达方法:,(1)将3送到变量i所标志的单元中。即,直接访问方式,(2)将3送到变量p所指向的单元(变量i)中。,即,间接访问方式,i,3,2000,i,3,2000,2000,p,注意:我们并不关心变量p的存储地址,,对 变量p的访问属于直接访问。,6,三、 指针变量,1.变量的指针,变量的地址称为变量的指针。,2. 指针变量,存储变量地址的变量称为指针变量,用来指向另一个变量。,3.,*,操作符,为了表示指针变量与它所指向的变量的之间的关系,在程序中用,*,符号表示“指向”。,例如,P代表指针变量,* P则表示P所指向的变量。,3,i,2000,2000,P,*P,以下两个语句作用相同:,i=3;,*P=3;,7,三、 指针变量,(续),4.指针变量的定义,int i , j ; int,*,pointer1,*,pointer2;,定义形式,:,基类型 *指针变量名;,举例,说明,(1)指针变量名前的*,表示该变量是指针型的变量。指针变量名为pointer1,而非 *pointer1。,(2)定义指针变量时必须指明基类型。,*注:以后几张幻灯片中提到的pointer1 pointer2是基于此例的。,8,如何使一个指针变量指向一个变量呢?,使用取地址运算符,&,,即,:pointer1=,赋值语句pointer1=&i;实现将变量i的地址保存入指针变量pointer1中。如右图所示。,3,i,pointer1,*,pointer1,你能画出第二个赋值语句的示意图吗?,三、 指针变量,5.指针运算符,&,9,三、 指针变量,(续),6.指针变量的引用,与指针变量有关的两个运算符: & : 取地址运算符 * :间接访问运算符,(1)上例将打印出i的值。,(2)*pointer1 与普通的整型变量一样使用,但前提是pointer1 必须已经明确地指向了某整型变量,或者说指针变量中必须已经存有了某整型变量的起始地址。,例如,i=3;pointer1=,说明,3,i,pointer1,*,pointer1,10,三、 指针变量,(续),例1: 输入两个整数,按先大后小输出这两个整数,#include ,void main(), int,*,p1,*,p2,*,p, a, b;,scanf(,%d%d,p1= /* 取变量的地址*/,if(ab) p=p1; p1=p2; p2=p; /* 指针变量间的相互赋值*/,printf(,%d%d,a,b);,printf(,max=%d,*,p1,*,p2 );,你能画出程序中指针处理过程的示意图吗?,11,三、 指针变量,(续),7.指针变量作为函数参数,函数的实参值是地址,函数的形参应定义为指针类型,此时,实参和形参之间仍然是传值方式。参见例2。,#include void s,*,p1, int,*,p2) int temp; temp=,*,p1;,*,p1=,*,p2;,*,p2=temp;, void main() int a,b,*,pointer1,*,pointer2; scanf(%d%d,/* 取变量的地址*/,if(ab) s);,/* 函数调用,实参为指针变量*/,printf(%d%d,a,b);,/* 打印函数调用后,变量a,b的值,观察其变化*/,在被调函数中,通过间接访问,,改变了主调函数中实参变量的值。,变量a,b的地址被传递,到函数的形参变量p1,p2中,12,四、数组与指针,数组在内存中占一片连续的存储区,该存储区的大小与数组的元素类型和数组长度有关。,每个数组元素占用相同大小的存储空间。,利用数组存储区的起始地址,可以逐个获得每个数组元素的存储地址。,例如,定义数组,int,a10;,1.数组的存储,a0,a1,a2,a3,a,4,a5,a6,a7,a8,a,9,注:假设数组a的存储区起始地址为2000。,2000,2002,2004,2006,2000+,4,*,2,2000+,9,*,2,由上图可知,数组元素ai的存储地址的计算公式为:,数组a的起始地址+i,元素类型占内存的字节数,图2,13,C语言规定:,数组名代表数组的起始地址,该地址在程序运行过程中不能修改。 即数组名a是个常量。,2.指向数组元素的指针,四、数组与指针,例如,,int,a10;,int,*,p;,对指针变量p赋值:p= 则使p指向了数组的第一个元素。,因此,下面对指针变量p赋值的两个语句等价:,p=,p=a;,因此定义指向数组的指针变量时,可以对其初始化:,int,a10;,int,*,p=a; (或,int,*,p=&a0; ),14,四、数组与指针,例如,定义:int a10 ,,*,p=a; 可有如下操作: p=a; p=,*,p=10;,3.,通过指针变量引用数组元素,4.,指针变量表达式和指针的算术运算符,(1) 可以对指针进行有限的算术运算,包括自增运算(+)、自减运算(-)、加上一个整数、减去一个整数,以及减去一个指针变量。,(2)指针运算的结果依赖于指针所指向的对象的大小。,指针的算术运算的规则是:,当一个指针加上或减去一个整数时,指针并非简单的加上或减去该整数值,,而是加上或减去该整数与指针指向的对象的大小的乘积。,例如:int a10 ,,*,p=a;,则 p=p+1; 使指针变量的值更新为数组元素a1的地址,即p指向了数组元素a1。,15,注意:a+是错误的,为什么呢?,例如:int a10 ,,*,p=a,,*,q,x;,假定数组a的起始地址为2000,则下列每个操作后变量的值分别为多少?,四、数组与指针,p=p+1;,q=p;,q+=2;,x=q-p;,p+;,+p;,-p;,p的值为2002,p指向数组元素a1.,q的值为2002, q指向数组元素a1.,q的值为2006, q指向数组元素a3.,x 的值为2,p的值为2004, p指向数组元素a2.,p的值为2006 , p指向数组元素a3.,p的值为2004, p指向数组元素a2.,p-;,p的值为2002, p指向数组元素a1.,通过 - 运算,,让指针变量指向数组中,的上一个元素。,得到:,从p到q的数组元素的个数,通过+ 运算,,让指针变量指向数组中,的下一个元素。,指针的算术运算,除了用于数组外,没有什么意义,16,四、数组与指针,5.指针和数组的关系,C语言中数组与指针关系密切,它们几乎可以互换。数组名可认为是一个常量指针,指针可以完成涉及数组下标的操作。,例如:int a10 ,,*,p=a;,则,p指向数组的第一个元素,可用如下的指针表达式引用数组元素a3,*,(p+3),式中的 3 是对于指针变量p的偏移量。,当p指向数组的起始位置时,偏移量等于数组的下标。,*,(p+3),这种表示法称为“指针表示法” (或,*,(a+3),),因为*的优先级高于+,所以圆括号是必需的。,注意,总结,至此,引用一个数组元素,可以采用如下两种方法之一:,(1) 下标法: 如ai,(2) 指针法:如,*,(p+i) 或,*,(a+i),17,四、数组与指针,例3:输出数组中的全部元素。(采用三种方法输出数组元素的值),#include void main() int a10 , i ; for(i=0; i10;i+) scanf(%d,i+) printf(%d,ai,); ,#include void main() int a10 , i ; for(i=0; i10;i+) scanf(%d,i+) printf(%d,*,(a+i),); ,#include void main() int a10 , i ,*,p; for(i=0; i10;i+) scanf(%d, p+) printf(%d,*,p,); ,1.下标法,2. 通过数组名计算数组元素的地址,找出元素的值,3. 用指针变量指向数组元素,(1)用下标法直观;,(2)用前两种方法效率一样;,C编译系统是将ai转换为,*,(a+i)来处理的,(3)用第三种方法省时间,,p+操作快。,18,四、数组与指针,6.用数组名作函数的参数,(1) 实参数组名代表该数组首元素的地址。而形参是用来接收 从实参传递过来的数组首元素的地址。因此,形参应该是一个指针变量(只有指针变量才能存放地址)。,(2) 虽然函数 f 的原型为 void f( int arr, int n) ,但编译时是将arr数组按指针变量来处理的。即:,void f( int arr, int n) 与 void f( int,*,arr, int n) 等价,#include void main() int array10 ; . f(array,10); . ,void f( int arr, int n) ,.,.,首先回顾第八章“函数”中介绍的数组名作函数参数的情形:,规定:,如果形参数组中,元素的值发生变化,,实参数组元素的值,随之变化。,说明,19,四、数组与指针,例4.将数组a中n个元素按相反的顺序存放。,#include void inv( int,*,x, int n),/* 形参为指针变量*/, int,*,p, temp,*,i,*,j, m=(n-1)/2; i=x; j=x+n-1; p=x+m; for(;i=p; i+,j-) temp=,*,i;,*,i=,*,j;,*,j=temp; return; void main() int i,a10=3,7,9,11,0,6,7,5,4,2; for(i=0;i10;i+) printf(%d,ai);,inv(a , 10 );,/* 函数调用,实参为数组名*/,for(i=0;i10;i+) printf(%d,ai);,2,4,5,7,6,0,11,9,7,3,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a 数组,i, x,p=x+m,j,图3,20,四、数组与指针,例5.用选择法对10个整数按由小到大顺序排序。,#include void sort( int,*,x, int n),/* 形参为指针变量*/, int i,j,k,t; for(i=0;in-1; i+) k=i; for(j=i+1;j,*,(x+k) k=j; if(k!=i),t=*(x+i);*(x+i)=*(x+k);*(x+k)=t;, void main() int,*,p,i,a10; p=a; for(i=0;i10;i+,p+) scanf(%d,p);,sort(p , 10 );,/* 函数调用,实参为指针变量*/,for(i=0, p=a;i10;i+,p+) printf(%d,*,p);,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,图4,a 数组,x,21,四、数组与指针,7.指针和多维数组,多维数组元素的地址,假设有数组定义: int a34;,C语言规定: (1) 二维数组的起始地址为a; (,2),此二维数组由三个行元素组成:a0,a1,a2; (3) 每个行元素又是一个一维数组,包含4个元素: a0 为第一行的起始地址;a0 可用*a表示。,a1 为第二行的起始地址;a1 可用,*(a+1),表示。,a2 为第三行的起始地址;a2 可用*(a+2)表示。 (4) 第0行第0列的元素a00的地址为: a0 ,也可用 *a表示。,第0行第1列的元素a01的地址为: a0+1,也可用 *a+1表示。,第0行第2列的元素a02的地址为: a0+2,也可用 *a+2表示。,第0行第3列的元素a03的地址为: a0+3,也可用 *a+3表示。,(5) 第0行第0列的元素a00可表示为: *(a0),也可用 *(*a)表示。,第0行第1列的元素a01可表示为: *(a0+1),也可用 *(*a+1)表示。,第0行第2列的元素a02可表示为: *(a0+2),也可用 *(*a+2)表示。,第0行第3列的元素a03可表示为: *(a0+3),也可用 *(*a+3)表示。(6),第1行第3列的元素a13可表示为: *(,a1,+3),也可用 *(,*(a+1),+3)表示。,把 a 看成一维数组时,按照前面给出方法,表示一维数组的元素。,22,在C程序中,用两种方法访问字符串:,(1)用字符数组存放一个字符串。 (2)用字符指针指向一个字符串。,1.字符串的表示形式,五、字符串与指针,#include void main() char string=china! ; printf(%sn,string);,#include void main() char,*,string=china! ; printf(%sn,string);,(1)用字符数组存放一个字符串。,(2)用字符指针指向一个字符串。,用字符串常量,初始化字符指针,用字符串常量,初始化字符数组,23,五、字符串与指针,2.访问字符串中的字符,#include void main() char a=I love china! ,b20; int i; for(i=0;,*,(a+i)!=0; i+),*,(b+i)=,*,(a+i);,*,(b+i)=0; printf(%sn,b);,例6.将字符串a复制为字符串b。,24,3.字符串指针作函数参数,五、字符串与指针,#include void copy_string(char *from, char *to) for(; *from!=0; from+,to+) *to=*from; *to=0; ,void main() char a=I love china! ,b20; int i; copy_string(a,b); printf(%sn,b);,例7. 用函数调用实现字符串a复制。,此循环可改为:while(*to=*from)!=0)to+; from+;,25,六、返回指针值的函数,一个函数可以返回一个int型、float型、char型的数据,也可以返回一个指针类型的数据。 返回指针值的函数简称为指针函数。,举例,指针函数的定义,函数类型 *函数名(形参表),定义形式,int *func(int x , int y ) char *string; . return(string);,26,作 业,P258:,10.1, 10.3, 10.6,27,#r%v(y+B3E6H9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkVnZq$u*x-A2D5G8KbNfQiTlXo#r%v(y0B3E6I9LcOgRjVmYp!t&w)z1C4G7JaMePhSkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JbMePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRjUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*x-A1D5G8JbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$u*x-A2D5G8KbNfQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!t&w)z1C4F7JaMePhSkWnZq$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JaMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6IaLdOgSjVmYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*x-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkWnZq$u*x-A2D5H8KbNfQiTlXo#s%v(y0B3E6I9LdOgRjVmYp!t&w-z1C4G7JaMePhTkWnZr$u*x+A2E5H8KcNfQiUlXo#s%v)y0B3F6I9LdOgSjVmYq!t&w-z1D4G7JbMePhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnZ(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D5G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOgRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$u*x-A2D5G8KbNfQiTlXo#r%v(y0B3E6I9LcOgRjVmYp!t&w)z1C4G7JaMePhSkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JbMePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*x-A1D5G8JbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$u*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!t&w)z1C4F7JaMePhSkWnZq$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYp!t&w-z1C4G7JaMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6IaLdOgSjVmYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6H9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkWnZq$u*x-A2D5H8KfRjUmXp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkWnZq$u*x-A2D5H8KbNfQiTlXo#s%v(y0B3E6I9LdOgRjVmYp!t&w)z1C4G7JaMePhSkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v)y0B3F6I9LdOgSjVmYq!t&w-z1D4G7JbMePhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$u*x-A2D5G8KbNfQiTlXo#r%v(y0B3E6I9LcOgRjVmYp!t&w)z1C4G7JaMePhSkWnZr$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JbMePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVmYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUmXp#s&v1C4G7JbMePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0B3F6IaLdOgSjVmYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*x-A1D5G8JbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmXp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!t&w)z1C4F7JaMePhSkWnZq$u*x+A2D5H8KbNfQiTlXo#s%v(y0B3E6I9LdOgRjVmYp!t&w-z1C4G7JaMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6IaLdOgSjVmYq!t&w-z1D4G7JbMePhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&w)z0C4F7IaMdPhSkVnZ(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkWnZq$u*x-A2D5H8KbNfQiTlXo#r%v(y0B3E6I9LcOgRjVmYp!t&w)z1C4G7JaMePhSkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v)y0B3F6I9LdOgSjVmYq!t&w-z1C4G7JbMePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8JbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$u*x-A2H9KcOfRjUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*x-A1D5G8JbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$u*x-A2D5G8KbNfQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!t&w)z1C4F7JaMePhSkWnZq$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JaMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6IaLdOgSjVmYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*x-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&w)4G8JbMeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6H9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkWnZq$u*x-A2D5H8KbNfQiTlXo#s%v(y0B3E6I9LdOgRjVmYp!t&w-z1C4G7JaMePhSkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v)y0B3F6I9LdOgSjVmYq!t&w-z1D4G7JbMePhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq,28,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


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

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


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