




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章指针和引用【什么是指针?
】存放地址的变量称为指针变量。地址是一个值,可以存放在变量中,存放地址的变量称为指针变量。一个指针变量里面所存放的内容一定是另一个变量在内存中的地址。拥有这个地址的变量称为该指针变量所指向的变量。4.1.1指针的概念
“指针”表达了两层含义:一个地址以及存储于该地址处的数据的类型【指针常量和指针变量
】空指针的地址值0可以用符号常量NULL表示。NULL(或0)是C++中经常用到的指针常量。列出的数据类型并不是指针变量本身的类型,而是指针用于保存的地址值中存储的变量的数据类型,即指针所指向变量的数据类型。指针是一个变量,必须先声明,后使用。其声明的一般形式如下:
数据类型*标识符;标识符给出的是指针变量名。“*”号说明其后的变量是一个指针变量。数据类型可以是C++语言中任一合法的类型。4.1.1指针的概念
指针也可以和其他变量同时声明比如:inti,*p1;说明:声明了p1、p2两个指针。其中p1指向int型变量,p2指向double型变量。比如:int*p1; double*p2;说明:声明了一个int型变量i和指针p1。
声明了一个指针后,在使用前必须首先给它赋一个合法的值。否则,程序中对指针的使用就有可能导致系统崩溃。注与其他变量一样,我们可以在声明指针的同时,通过初始化来给指针赋值。比如:inti,*p1=&i; int*p2=0;说明:第1个声明就将指针p1的值初始化为变量i的内存地址;第2个声明将指针p2的值初始化为0。值为0的指针叫空指针。任一指针变量本身数据值的类型都是unsignedlongint(1)两个特殊的指针操作符是&和*。可施于指针上的操作
&称为取址操作,是一元操作符,作用于一个操作数,功能是取操作数的地址intx=29;int*point=&x;inty=*point;29…0x100f…29变量地址YpointX0x10070x100b0x100f取出X的地址4.1.1指针的概念
*称为取值操作,也是一元操作符,操作数只能是指针变量,功能是返回指针所指向的变量的值。
每个变量在内存中都有一个固定的地址,而指针中保存的就是变量的地址值。如果声明了一个指针,并使其值为某个变量的地址,则可以通过这个指针间接地访问在这个地址中存储的值。4.1.1指针的概念
说明:没有明确地给指针赋一个地址值,因而其值是随机的。将输出变量i的值1比如:inti=1,*p=&i; cout<<*p;输出2比如:inti,*p=&i; *p=2;cout<<*p;例如 int*p; *p=2;//错误,指针P没有赋值在使用指针前,必须首先给它赋一个合法的值。通过“*”运算访问目的数据的过程也称为“间接寻址”过程。注4.1.1指针的概念
【例4.1】简单指针变量。#include<iostream.h>intmain(intargc,char*argv[]){floatx,y;float*px,*py;px=&x;//A:px指向xpy=&y;//B:py指向y*px=3.14;//将3.14送入px指向的单元(X)中*py=4.21;//将4.12送入py指向的单元(y)中if(x>y)cout<<x;elsecout<<y;return0;}
4.1.1指针的概念
(2)指针的算术运算指针可以和整数进行加减运算,包括增1和减1运算。指针的算术运算与一般的数值计算不同,它不是简单地将指针的值加上或减去给定的整数值,而是与指针所指向变量的类型有关。注指针加n的实际操作是使指针中的地址值加上sizeof(数据类型)*n指针减n的实际操作是使指针中的地址值减去sizeof(数据类型)*n4.1.1指针的概念
利用指针对数组进行操作时,也必须注意越界问题。比如: intx[5]; int*p=x;//指针p指向数组x的首地址 p=p+5; *p=10;数组是连续存储的,通过对指向数组的指针进行加减运算,使指针指向数组中不同的元素。对指向普通变量的指针进行加减运算后,指针所指向的地址的用途是不确定。如果两个指针所指向的变量类型相同,也可以对它们进行如下减法运算。比如:p1-p2运算结果是一个整数值,它的绝对值就是两个指针所指向的地址之间相隔数据的个数。p=p+5已经使指针p指向的地址在数组之外,*p=10表达式在这个地址中写入值有可能造成严重的后果。指针加减运算一般用在对数组元素进行操作的场合。比如:intx[5],i; int*p1=&x[1],*p2=&x[4]; i=p2-p1;(3)比较运算指针的关系运算一般是在指向相同类型变量的指针之间进行。比如:inta; int*p1=&a;*p2=p1;说明:声明的两个指针作p1==p2运算,其结果为1(true)。也即指针p1、p2指向同一个变量。变量i就表示数组元素x[1]和x[4]之间相隔的元素的个数。对于其他关系运算,比较的也是两个指针所指向的地址值的大小。一般用在对数组进行操作的场合。4.1.1指针的概念
声明二级指针的形式如下: 数据类型**标识符比如:inti,*p=&i int**pp=&p1;指针是一个变量,在内存中也需占据一定的空间,具有一个地址,这个地址也可以利用指针来保存。这种指向指针型数据的指针变量称为指向指针的指针,或称多级指针。指通过两次间接寻址后所访问的变量的类型。两个“*”号表示二级指针。4.1.1指针的概念
【多级指针】#include<iostream.h>#include<string.h>voidmain(){ char**p; chara='x',*q=&a; p=&q; cout<<**p<<endl;}输出结果是:x二级指针的使用4.1.1指针的概念
4.1.2指针的应用【例4.3】指针变量指向单元的值、指针变量值、指针占用单元地址值的区别#include<iostream.h>voidmain(){inti=7,*p;p=&i;//p指向icout<<"\nThevalueofiis"<<*p;cout<<"\nTheaddresssofiis"<<p;cout<<"\nTheaddressofpis"<<&p;}程序运行结果为:Thevalueofiis7Theaddressofiis0x0064FDF0Theaddressofpis0x6064FDF4【例4.5】定义指向指针的指针变量。观察对这种指针变量间接访问的结果。#include<iostream.h>voidmain(){ intva=100,*pva,**ppva; intk1=100; pva=&va; cout<<"*pva="<<*pva<<endl;//间接访问结果是整型数 ppva=&pva; cout<<"*ppva="<<*ppva<<endl;//间接访问结果是地址 cout<<"pva="<<pva<<endl;//就是指针pva的内容}程序运行结果为:*pva=100*ppva=0x0012FF7Cpva=0x0012FF7C4.1.2指针的应用【例4.6】构建人员档案链表#include<iostream.h>voidmain(){ inti; structperson{ charname[12]; intage; charsex; person*next; };//用户定义的数据类型结构pesrson,它由4个数值成员:name、age、sex和person类型的指针next组成 person*head,*tail,*temp;//指向结构person类型的三个指针 temp=newperson; head=temp; tail=head;4.1.2指针的应用for(i=1;;i++){ cout<<i<<""<<"name:"; cin>>temp->name; if(temp->name[0]!='*'){ cout<<"age,sex:"; cin>>temp->age>>temp->sex; temp->next=NULL; tail=temp; } else{ deletetemp; tail->next=NULL; break; } temp->next=newperson; temp=temp->next; }//此for语句的运行完成人员档案资料表的输入,以*作为人名即可停止输入。 4.1.2指针的应用temp=head; while(temp!=NULL){cout<<endl<<temp->name<<""<<temp->age;cout<<""<<temp->sex;temp=temp->next;}}程序运行结果如下:1name:Tomage,sex:24m2name:Hillyage,sex:23f3name:Kateage,sex:28m4name:Susanage,sex:27f5name:*Tom24mHilly23fKate28mSusan27f4.1.2指针的应用4.1.3指针与数组【指向数组的指针】可以在程序中声明一个与数组元素类型相同的指针,然后使之指向数组的某个元素。通过这个指针同样也能访问到数组中的每个元素。例如:intx[5]; int*p=x;声明的指针指向数组intx[5]的第一个元素。因此,通过它就可以访问到这个数组中的每一个元素,如*(p+2)表示的就是元素x[2]的值。利用指向数组某个元素的指针访问数组中的每个元素【例4.7】程序(show_ma.cpp)#include<iomanip.h>
voidshow_matrix(int*Array,introw,intcol,intwidth)
{
inti,j;
for(i=0;i<row;i++){
cout<<endl;
for(j=0;j<col;j++)cout<<setw(width)<<*(Array+i*col+j);
}
}intmain(intargc,char*argv[]){ ints[][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};cout<<endl<<*((int*)s+2*3+1)<<*(&s[0][0]+2*3+1);//输出s[2][1]两次,即88show_matrix(&s[0][0],4,3,5);cout<<endl;cout<<endl<<endl<<"按回车键继续...";cin.get();return0;}程序的输出是:881234567891011124.1.3指针与数组数组名是指针常量,而不是指针变量。如:intarray[100];则:array=&array[1];(×)指针的加减指针加减的含义:☆指针+1:指针向后移动一个数组元素。☆指针-1:指针向前移动一个数组元素。4.1.3指针与数组102030405001234arraypapa+1pa+2pa+3pa+4如:intarray[5]={10,20,30,40,50};int﹡pa=array;4.1.3指针与数组假设一个二维数组:intx[2][3];则数组中的元素x[i][j]有多种访问方法,以下是其中的一部分: *(*(x+i)+j) *(x[i]+j) *(x+i)[j] *(x+3*i+j)例如:假设p是指向上述二维数组首元素的指针,下面列出部分通过这个指针访问数组元素x[i][j]的方法: *(*(p+i)+j)*(p[i]+j) *(p+i)[j]*(p+3*i+j)p[i][j]例如:数组名是一个指针常量,其值不可改变。在使用增1或减1运算访问数组元素时,不能直接利用数组名,必须另外声明一个指向数组某个元素的指针。如果是另外声明指针指向它的某个元素,处理的方法也有许多种。4.1.3指针与数组【指针与字符串】4.1.3指针与数组字符串的指针表示:定义一个指向字符的指针,然后将一个字符数组名赋给该指针或将字符串常量赋给该指针。【例4.8】用指针输出字符串的值。#include<iostream.h>#include<string.h>voidmain(){chars1[]="sunday!";char*p1=s1;//指向数组元素的指针intlength=strlen(s1);for(inti=0;i<length;i++)cout<<"\t"<<s1[i];cout<<"\n";for(;*p1;)cout<<"\t"<<*p1++;//每输出一个字符,p1指针向后移动一个字符位置}用数组名和用指针处理字符串的区别4.1.3指针与数组(1)两者概念上不同。例如:
char*p1,str1[50];(2)复制字符串的方式不同。例如:char*p1,str1[10]="Sunday!",str2[20];str2=str1;//错误,因数组名代表的是常量,不能进行赋值运算strcpy(str2,str1);//正确strcpy(p1,str1)//错误,p1无指向的空间p1=str1;//正确,将str1数组的起始地址赋给p1,即p1指向str1字符数组(3)用键盘输入的方式不同例如:charstr1[8],*p1,str2[20];cin>>str1;//正确cin>>pl;//错误,p1没有确切地指向一有效内存,这样赋值容易引起异常现象p1=str2;cin>>p1;//正确,将从键盘输入的字符串送入p1指向的字符数组str2中(4)数组名不能进行赋值运算,但指针变量可以任意修改其值。例如:p1=p1+5;//正确str1=str1+2;//错误4.1.3指针与数组【指针数组】4.1.3指针与数组数组中每个元素都是一个指针。它的声明形式如下: 数据类型*数组名[常量表达式1][常量表达式2]…;指针数组就是其元素为指针的数组。例如:int*p1[6]; double*p2[3][4];指数组中各元素指针所指向的类型,同一指针数组中各指针元素指向的类型相同。是一个标识符,是这个数组的名字,也即数组的首地址。分别声明了含有5个元素的一维int指针数组p1和含有12个元素的二维double指针数组p2。【例4.10】对从标准输入设备中输人的英文单词按字典顺序由小到大排序后输出。#include<iostream.h>#include<string.h>constintN=10;intreadword(char*word[]){charstr[20];inti=0,l;cin>>str;while(strcmp(str,"end")){l=strlen(str);word[i]=newchar[l];strcpy(word[i],str);i++;cin>>str;}returni;}【指针数组】4.1.3指针与数组voidwriteword(char*word[],intn){while(--n>=0)cout<<*word++<<endl;}voidsort(char*w[],intn){intgap,i,j;char*t;for(gap=n/2;gap>0;gap/=2)for(i=gap;i<n;i++)for(j=i-gap;j>=0;j-=gap){if(strcmp(w[j],w[j+gap])<=0)break;t=w[j];w[j]=w[j+gap];w[j+gap]=t;}}【指针数组】4.1.3指针与数组voidmain(){char*word[N];intnum;num=readword(word);sort(word,num);writeword(word,num);}
【指针数组】4.1.3指针与数组 指针数组在使用前也必须首先赋值,也可以利用初始化赋值。注数组指针就是一个指向数组的指针。比如:int(*p)[5];表达式中的圆括号不可省略,因为“[]”号的优先级比“*”号高。声明了一个指向具有5个元素的int型数组的指针。声明形式如下:
数据类型(*指针名)[常量表达式1][常量表达式2]…;【数组指针】4.1.3指针与数组4.1.4const型指针指针可以声明为经初始化后就不可被修改,这样的指针称为const型指针
类型修饰符*(const变量名);例如:char*(constptr)=buf;一const型指针变量当一个指针被声明为指向const型变量时,就意味着程序将无法通过指针来改变变量的值。声明的格式如下所示:const类型修饰符*变量名;如:constchar*st;二指向const型变量的指针 在声明常指针时必须初始化(除非它是函数的形参)。注如果指针是const型的,它指向的变量也是const型的
,则是声明一个指向常量的指针常量,指针本身的值不可改变,它所指向的数据的值也不能通过指针改变。比如: inta=1,b=2; int*constp1=&a;//声明指向int型常量的指针p1 int*constp2;//错误,在声明指针常量时,必须初始化 *p1=2;//正确,指针常量指向的值可以改变 p1=&b;//错误,指针常量本身的值不可改变 对于能说明为常量的情形,应该尽量用关键字const修饰。注关键字const放在不同的位置表示的意义也不相同。4.1.5内存分配【静态内存分配】动态内存分配是指在程序运行期间根据实际需要随时申请内存,并在不需要时释放。静态分配是通过变量声明实现的,每声明一个变量,就为这个变量分配了空间。例如:inti,j,k;floatscore[100];使用动态内存必须遵循以下4个步骤:①确定需要多少内存。②分配所需的内存。③使用指针指向获得的内存空间。④使用完后,及时释放这部分内存。【动态内存分配】4.1.5内存分配在进行动态内存分配时需要使用运算符new和运算符delete,相应地我们把申请和释放内存的过程称作创建和删除。【动态内存分配】运算符new用于申请所需的内存单元。使用形式如下:指针=new数据类型指针指向的数据类型应与关键字new后给定的类型相同。【
运算符new】4.1.5内存分配关键字new的作用是从堆中为程序分配指定数据类型所需的内存单元。若分配成功,则返回其首地址;否则,返回一个空指针。new返回的内存地址必须赋给指针。在分配成功后,可以使用这个指针。比如:*p=1;分配失败,则返回空指针比如:int*p; p=newint;在堆中申请了一个int型数据的内存单元,其地址保存在指针p中。 在实际编程时,对于动态内存分配,应在分配操作结束后,首先检查返回的地址值是否为零,以确认内存申请是否成功。注在动态申请内存时,也可以同时对分配的内存单元进行初始化。比如: int*p=newint(1);4.1.5内存分配【
运算符delete】当程序中不再需要使用运算符new申请到的某个内存时单元时,就必须用运算符delete来释放它。表述形式如下:
delete指针名;//释放非数组内存单元 delete[]指针名;//释放数组内存单元指指向需要释放的内存单元的指针的名字 在这一操作中,指针本身并不被删除,必要时可以重新赋值。注在释放数组内存单元时,运算符后别忘了“[]”号。如果未加“[]”号,就只是释放数组的第一个元素占据的内存单元。比如:int*p1=newint(1); Date*p2=newDate[5]; deletep1; delete[]p2;在进行动态内存分配时,指向分配内存的指针可以是一个局部变量,但它所指向的内存除非程序显式地释放它,否则直到程序运行结束,它一直都被占据着。 当程序从声明指针的函数返回前必须利用该指针删除在函数中申请的内存单元。指针将退出作用域,不能再用,这个内存单元在整个程序运行结束前,就无法释放,从而不能再用,这就是所谓的内存遗漏问题。注4.1.5内存分配4.1.6指针与函数【4.1.6.1
指针参数】函数的某个参数是指针,对这个函数的调用就是传址调用。用指针作参数,实现地址调用,必须满足以下条件:函数的形式参数是指针变量;函数的实参数是内存的地址,具体来说可以是数组名、变量的地址、用变量地址初始化的指针;形参指针类型和实参地址类型必须相同。满足上述条件后,这样的函数调用在使用上有以下的特点:实参传递给形参的是内存的地址,所以形参指针指向实参变量;形参指针通过间接引用,直接访问实参变量,包括改变实参变量的值;函数调用后,可以保留对实参变量的操作结果,如果有多个实参,就可以有多个实参变量在函数调用中得到修改。4.1.6指针与函数编写数据交换的函数。在main中调用这个函数,交换main中定义的变量。#include<iostream.h>voidswap(int*a,int*b);voidmain(){ intx(5),y(10); cout<<"主函数变量的值:x="<<x<<"y="<<y<<endl; swap(&x,&y); cout<<"返回后变量的值:x="<<x<<"y="<<y<<endl;}voidswap(int*a,int*b){ intt; t=*a; *a=*b; *b=t; cout<<"函数中完成了交换:*a="<<*a<<"*b="<<*b<<endl;}4.1.6指针与函数程序运行结果为:主函数变量的值:x=5y=10函数中完成了交换*a=10*b=5返回后变量的值:x=10y=5【4.1.6.2
指针函数:返回指针值的函数】当一个函数的返回值是指针时,通过返回的指针中存储的地址值,主调函数就能访问相应内存中存放的数据,还能通过指针算术运算访问这个地址前后内存中的值。定义返回指针的函数的函数头一般形式如下: 数据类型*函数名(参数表)指针作为函数返回值的情形,较多地出现在主调函数需要访问返回地址前后顺序存放的多个变量时,如数组、字符串。注是函数返回的指针所指向数据的类型。4.1.6指针与函数【例4.15】返回指针值函数的使用。程序功能:用户输入任意一个字符串和字符c,寻找输入串中第一个c字符出现的位置(若有的话),并输出从c字符开始的子串以及c字符在输入串中的下标号;若输入串中不出现c字符的话,输出“nomatchfound”#include<iostream.h>#include<stdio.h>char*search(charch,char*str);voidmain(void){ chars[8],*p,c; cout<<"Inputastring:"<<endl; gets(s); cout<<"Inputacharacter:"; cin>>c; p=search(c,s);//调用search,返回串s中第一个字符c出现的位置,即指向字符的指针)4.1.6指针与函数if(p)//s中含有字符c时,返回原结果指针p值为非0 { cout<<"Sub_string=>"<<p<<endl; cout<<"Index=>"<<p-s<<endl; } else//s中不含有c cout<<"nomatchfound"<<endl;}char*search(charch,char*str){ //寻找str串中第一个字符ch出现的位置(地址值,即指向字符的指针)并返回inti=0; while(ch!=str[i]&&str[i]!='\0') i++; if(ch==str[i]) return(&str[i]); else return(NULL);}4.1.6指针与函数程序运行结果为:Inputastringeverybodyishere!Inputacharacter:iSubstring=>ishere!Index=>10【4.1.6.2
函数指针:指向函数的指针】一个函数是一组代码的封装体,它在内存中占有一定的存储空间,将其入口地址赋给一个指针,这就是函数型指针,或指向函数的指针。
声明的一般形式如下: 数据类型(*指针名)(参数表);指函数返回值的类型,参数表中的内容应与指针所指向的函数的形参表相同。4.1.6指针与函数比如:int(*pfun)(int,int);声明的函数指针可以指向一个函数的首地址,该函数的返回值类型和形参表都必须与上述声明中指定的相同。一般采用的赋值方法如下: 函数指针名=函数名函数指针在使用前,必须先赋值。函数名所代表的函数必须是函数指针可以指向的。声明了一个名为pfun的指针。该指针可以指向返回值为int型,有两个int型参数的函数。4.1.6指针与函数【例4.16】函数指针的应用。#include<iostream.h>intadd(inta,intb){returna+b;}intmain(intargc,char*argv[]){int(*p)(int,int);p=add;cout<<add(3,5)<<endl;cout<<(*p)(3,5)<<endl;cout<<p(3,5)<<endl;cout<<(*add)(3,5)<<endl;cout<<"按回车键继续...";cin.get();return0;}程序运行结果为:88884.2引用引用是变量或者其他编程实体(如对象)的别名。声明引用的过程是为某个变量建立别名的过程(也称某个变量被引用)。在声明引用时需要同时初始化:其声明的一般形式如下: 数据类型&引用名=变量名; 或 数据类型&引用名(变量名);比如:inta; int&ra=a;被引用的变量可以是任一类型的变量。为整数a声明了一个引用ra变量名是被引用变量的名字“&”是引用运算符指被引用变量的类型在为一个变量声明了引用之后,引用就成了这个变量的别名。【4.2.1引用的概念】4.2引用【4.2.2引用的操作】【例4.18】引用的操作。引用的操作分两方面:通过引用,使用相关的变量;或者通过引用,修改相关的变量。#include<iostream.h>voidmain(){ intintA=10,B=20;int&refA=intA;cout<<"引用的值和相关变量值相同:refA="<<refA<<endl;refA=5;cout<<"引用的变化,则相关变量也变化:intA="<<intA<<endl;cout<<"引用的地址和相关变量地址相同:intA的地址="<<&intA<<endl;cout<<"引用的地址和相关变量地址相同:refA的地址="<<&refA<<endl;}程序运行的结果为:引用的值和相关变量值相同:refA=10引用的变化,则相关变量也变化:intA=5引用的地址和相关变量地址相同:intA的地址=0x0012FF7C引用的地址和相关变量地址相同:refA的地址=0x0012FF7C4.2引用【4.2.3不能被定义引用的情况】(1)对void的引用。因为void本身就表示没有数据类型,对它的引用也就没有意义。这一点和指针不一样,可以定义指向void的指针;(2)对数组名的引用。因为数组名本身不是一个变量,它只是一些变量的聚集,所以,对数组名的引用没有意义。可以说明对数组的某一个元素的引用,如:
intarr[10];int&rarr=arr;//错误!不能说明数组名的引用int&rarr0=arr[0];//正确(3)指向引用类型的指针。因为引用本身只是一个符号,它没有任何内存空间,所以不能定义指向引用类型的指针:
inti;int&pp=i;int&*pr=&pp;//错误!不能定义指向引用的指针。
注意“int*&”和“int&*”的区别。“int*&”表示对int型指针的引用,"int&*"表示指向int型引用的指针。前者是允许的,而后者是不允许的。4.2引用【4.2.4函数参数中引用的传递】引用常常被用作函数的形参。引用作为形参有以下优点:用引用传递函数的参数,能保证参数传递中不产生副本,提高传递的效率;引用无须像指针那样需要使用*和->等运算符【例4.20】作为函数参数的引用。#include<iostream.h>structbigone{intserno;chartext[1000];};voidslowfunc(bigonep1);//值传递函数参数voidfastfunc(bigone&p1);//引用传递函数参数4.2引用intmain(){staticbigonebo={123,"ThisisaBIGstructure"};//结构体较大,时间开销较大slowfunc(bo);//引用传递比值传递的时间开销要小fastfunc(bo);return0;}voidslowfunc(bigonep1)//值传递函数{cout<<p1.serno<<endl;cout<<p1.text<<endl;}voidfastfunc(bigone&p1)//引用传递函数{cout<<p1.serno<<endl;cout<<p1.text<<endl;}程序运行结果为:123ThisisaBIGstructure123ThisisaBIGstructure4.2引用【4.2.5用引用返回多个值】用引用给函数传递两个或两个以上的参数,然后由函数往目标中填入正确的值。因为用引用传递允许函数改变原来的目标,这一方法实际上让函数返回两个或两个以上的信息。这一策略绕过了函数的返回值,使得可以把返回值保留给函数,作报告运行成败或错误原因使用。【例4.21】Factor()函数检查用值传递的第一参数。如果不在0~20的范围内,它就简单地返回错误值(假设程序正常返回为0)。程序所真正需要的值squared和cubed是通过改变传递给函数的引用返回的,而没有使用函数返回机制。
4.2引用#include<iost
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC 61215:2005 FR-D Crystalline silicon terrestrial photovoltaic (PV) modules - Design qualification and type approval
- 【正版授权】 IEC 61558-1:1997+AMD1:1998 CSV EN-D Safety of power transformers,power supply units and similar - Part 1: General requirements and tests
- 【正版授权】 IEC 61058-1:2000+AMD1:2001 CSV EN-D Switches for appliances - Part 1: General requirements
- 2025年主题教育活动实施方案
- 2025年五一主题劳动光荣活动方案
- 放射性肠炎的评估及护理
- 校园安全教育活动方案2025年模板
- 伺服系统与工业机器人 课件汇 第6-13章 伺服驱动器的参数配置-工业机器人工程应用及实例
- 迎接2025年元旦节联欢晚会活动方案
- 酒店安全知识培训
- 天津市南开区2024-2025学年高三下学期质量监测(一)地理试卷(原卷版+解析版)
- 【原创】学校书记中央八项规定精神学习心得
- 楼梯踏步抹灰标准合同7篇
- 【厦门大学】DeepSeek大模型赋能高校教学和科研
- 西安房屋租赁合同(官方版)6篇
- 2025年商丘职业技术学院单招职业技能考试题库含答案
- 2025年榆林城市投资经营集团有限公司招聘笔试参考题库含答案解析
- 液氯钢瓶应急堵漏工具操作指导规程
- 2025届高三化学二轮复习 化学工艺流程 课件
- 2024广东深圳市龙岗区产服集团“春雨”第二批招聘笔试笔试参考题库附带答案详解
- PLC应用技术课件 任务7. S7-1200 PLC控制电动机星三角启动(定时器)
评论
0/150
提交评论