版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
指针本章内容第一节指针和指针变量第二节指针和数组第三节指针和字符串第四节指针和函数一、指针1、地址第一节指针和指针变量内存是以字节为单位的存储空间,内存的每个字节都有唯一的编号,这个编号就称为地址。定义一个变量时,系统会分配相应的内存空间来存储这个变量,不同类型的变量分配的内存空间是不一样的,例如int变量分配4个字节,char变量分配1个字节。变量所占内存空间的第一个字节的地址就是该变量的地址。2、指针变量在内存中的地址称为变量的指针。程序中使用的其他数据,如数组、字符串、函数等,系统也会分配内存空间,因此这些数据也有相应的指针。二、指针变量1、指针变量的定义指针变量的定义格式为:数据类型*指针变量名列表;和其他变量一样,指针变量必须先定义后使用。指针变量是指存放内存地址的变量,即存放指针的变量。当指针变量中存放某个数据的地址时,一般称为指针变量指向该数据。说明:(4)和其他变量一样,系统也会为指针变量分配内存空间。无论指针变量指向哪种数据类型,其占用的内存空间都是相同的。(2)指针变量名前的*是说明符,表示该变量为指针变量,它不属于指针变量名。(1)数据类型表示指针变量所指向数据的类型。指针变量只能指向定义时所指定类型的数据。(3)同时定义多个指针变量时,每个变量前面都要有*,否则就是普通变量。2、相关运算符&
取地址运算符*指针运算符,也称间接寻址运算符3、指针变量的初始化指针变量定义后必须先初始化才可以使用。指针变量初始化的方法可以有以下两种:(1)定义指针变量的同时进行初始化。(2)先定义指针变量,再用赋值语句进行初始化。4、指针变量的运算(1)指针变量与整数的加减运算指针变量与整数进行加减运算时,是由指针变量指向的数据类型的字节数决定实际的加减值。(3)指针变量之间的关系运算两个指向相同类型数据的指针变量之间可以进行关系运算,如==、<和>。(2)指针变量之间的减法运算两个指向相同类型数据的指针变量之间可以进行减法运算,结果是两个指针之间的数据个数。程序段10-1#include<iostream>usingnamespacestd;intmain(){ intn1,n2,max;
int*p1,*p2;//定义指针变量p1和p2 cout<<"输入两个数:";cin>>n1>>n2;
p1=&n1;//指针变量p1指向n1
p2=&n2
max=*p1 if(max<n2) { max=*p2; } cout<<"大数是"<<max<<endl;return0;}一、指向数组元素的指针变量的定义和赋值1、指向数组元素的指针变量的定义第二节指针和数组指向数组元素的指针变量定义方法与指向变量的指针变量定义方法相同。例如:
inta[5]; int*p;2、指向数组元素的指针变量的赋值例如:
p=&a[0];数组名代表数组的首地址,即数组元素a[0]的地址,因此上面的赋值语句也可以写为:
p=a;赋值也可以在定义指针变量的同时进行。例如:
inta[5];int*p=&a[0];//也可以写为int*p=a;二、访问数组元素使用指针运算符*来访问数组元素。指针变量p指向数组的第一个元素时,使用*(p+i)就可以访问数组的第i个元素。因为a也表示数组首地址,所以访问数组的第i个元素也可以使用*(a+i)的形式。访问数组元素主要有以下两种方法:下标法指针法指针变量p也可以指向数组的其他元素,当p指向数组的第n个元素时,*(p+i)表示访问数组的第n+i个元素。而数组名a是常量,它的值不能改变,只能指向数组的开头。程序段10-2#include<iostream>usingnamespacestd;intmain(){ inta[5],i; int*p=a;cout<<"输入数组的5个数:"; for(i=0;i<5;i++) cin>>*(a+i);//*(a+i)表示数组元素a[i] cout<<"反向输出:";for(i=4;i>=0;i--)//从数组最后一个元素开始,依次向前输出元素
cout<<*(p+i)<<"";//*(p+i)也表示数组元素a[i] return0;}一、指向字符串的指针变量的定义和赋值1、字符指针变量指向字符数组
第三节指针和字符串字符串存放在事先定义的字符数组中。例如:
charstr[10]="computer"; char*sp; sp=str;2、字符指针变量直接指向字符串没有事先定义的字符数组。例如:
constchar*sp="computer";VisualStudio2022中,字符指针变量直接指向字符串时,因为字符串是常量,所以需要在char前面加const。二、访问字符串中的字符根据字符指针变量的不同指向,访问字符有以下两种情况:(2)如果字符指针变量指向字符串常量,需要注意,字符串中的字符只能读取而不能写入,即不能修改字符值。(1)如果字符指针变量指向字符数组,则数组中的每个字符都可以读取和写入。程序段10-4#include<iostream>usingnamespacestd;intmain(){charstr[30];
char*sp=str; cout<<"输入字符串:";cin.getline(sp,30);cout<<"输出大写字母:"; for(;*sp!='\0';sp++) if(*sp>='A'&&*sp<='Z') cout<<*sp;cout<<endl;return0;}一、指针变量作为函数参数1、指向普通变量的指针变量作为函数参数第四节指针和函数指针变量作函数参数时,形参会从实参获得变量的地址,因此形参和实参指向同一个变量。当形参指向的变量发生变化时,实参指向的变量就同时改变。当函数参数是普通变量时,实参和形参间进行的是值传递,而当函数参数是指针变量时,实参和形参间进行的则是地址传递。程序段10-5#include<iostream>usingnamespacestd;voidswap(int*p1,int*p2)//指针变量p1和p2为形参//swap是交换两个变量值的函数{ inttemp;
temp=*p1; *p1=*p2; *p2=temp;}intmain(){ inta,b; cin>>a>>b; if(a>b) swap(&a,&b);//变量a和b的地址为实参
cout<<"从小到大输出:"; cout<<a<<''<<b<<endl; return0;}2、指向数组元素的指针变量作为函数参数数组名表示数组的首地址,如果定义一个指向数组第一个元素的指针变量,那么这个指针变量也表示数组的首地址,和数组名含义相同,所以也可以用指向数组第一个元素的指针变量来作为函数参数。数组名可以作为函数参数,在函数调用时,实参数组的首地址会传递给形参数组,因此两个数组占用同一段内存空间,形参数组中的元素发生变化时,实参数组中的元素也会有相同的变化。数组名或指针变量作为函数参数有以下四种情况:实参和形参都是指针变量。实参是指针变量,形参是数组名;实参是数组名,形参是指针变量;实参和形参都是数组名;程序段10-6voidreplace(int
*p,intn){ inti; for(i=0;i<n;i++,p++) if(*p<0) *p=0;}intmain(){ inta[5],i;
int*pa=a; cout<<"输入数组元素:"; for(i=0;i<5;i++) cin>>a[i]; replace(pa,5);
cout<<"替换后的数组元素:"; for(i=0;i<5;i++) cout<<a[i]<<''; return0;}需要注意,不管使用哪种方式传递数组,都不能在函数内部求得数组长度,因为参数只是一个指针,而不是真正的数组,所以必须要用另外一个参数来传递数组长度。程序段10-7voidconnect(char*p1,char*p2){ for(;*p1!='\0';p1++);//p1指向字符串1结束符'\0' for(;*p2!='\0';p2++) if(*p2>='0'&&*p2<='9') { *p1=*p2; p1++; } *p1='\0';//连接后在字符串1末尾添加结束符'\0'}intmain(){ charstr1[30],str2[20];
char*ps1=str1; char*ps2=str2; cout<<"输入两个字符串:"<<endl; cin.getline(ps1,30); cin.getline(ps2,20); connect(ps1,ps2); cout<<ps1<<endl; return0;}二、指针作为函数返回值返回值是指针的函数称为指针函数。指针函数的定义格式为:数据类型*函数名(参数列表){
函数体}每个函数最多只能有一个返回值,如果需要返回多个值,则可以通过指针函数来完成,返回一个指向多个值的指针。程序段10-8#include<iostream>#include<string.h>usingnamespacestd;char*longer(char*p1,char*p2){ if(strlen(p1)>=strlen(p2)) returnp1;//返回值为指向字符数组的指针
else returnp2;}intmain(){ charstr1[30],str2[30]; char*str; char*ps1=str1; char*ps2=str2; cout<<"输入两个字符串:"<<endl; cin.getline(ps1,30); cin.getline(ps2,30); str=longer(ps1,ps2);//将函数返回的指针赋值给指针变量str cout<<"较长的字符串是:"<<endl; cout<<str<<endl; return0;}三、函数指针变量(扩展内容)1、函数指针变量的定义函数所占用内存的首地址称为函数指针,指向函数指针的变量就是函数指针变量。函数指针变量的定义格式为:数据类型(*函数指针变量名)(参数列表);参数列表中可以同时给出参数的类型和名称,也可以只给出参数的类型,省略参数的名称。函数指针变量名的括号不能省略。2、函数指针变量的使用定义函数指针变量后,就可以把一个函数的首地址赋给这个指针变量,使指针变量指向这个函数,然后通过函数指针变量调用该函数。调用函数的格式为:(*函数指针变量名)(参数列表);程序段10-9#include<iostream>usingnamespacestd;intmax(intn1,intn2){ intm; if(n1>n2) m=n1; else m=n2; returnm;}intmain()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 帮人注销驾校报名委托书
- 幼儿园教师教案教研活动
- 【七年级下册地理粤教版】8.2 欧洲西部 同步练习
- 【七年级下册地理湘教版】专项06 识图集训
- 高二物理教学工作总结引导学生动手实践的实验教学策略
- 2025关于能源管理的合同范文
- 2025办公家具采购的合同
- 五官科护士的服务总结
- 金属制品业务员工作总结
- 首饰钟表销售感悟总结
- 登高车高空作业施工方案
- 2024年广东揭阳市揭西县集中招聘事业单位人员85人历年高频考题难、易错点模拟试题(共500题)附带答案详解
- 猪肉配送投标方案(技术方案)
- 财务尽职调查资料清单-立信
- 2024至2030年中国柔性电路板(FPC)行业市场深度分析及发展趋势预测报告
- IGCSE考试练习册附答案
- 小学三年级下一字多义(答案)
- Unit 6 同步练习人教版2024七年级英语上册
- 九三学社申请入社人员简历表
- 非诺贝特酸胆碱缓释胶囊-临床用药解读
- 设备管理:设备管理的维护与保养
评论
0/150
提交评论