




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
指针知识点总结范文 指针及其应用关于指针的考点(1224分)?指针与指针变量的概念、指针与地址运算符。 ?变量、数组、字符串、函数、结构体的指针,以及指向变量、数组、字符串、函数、结构体的指针变量,通过指针引用以上各类型数据。 变量、数组、字符串、函数、结构体的指针,以及指向变量、数组、字符串、函数、结构体的指针变量,通过指针引用以上各类型数据。 ?用指针作函数参数。 ?返回指针值的指针函数。 ?指针数组、指向指针的指针。 ?main函数的命令行参数。 知识点归纳1指针与指针变量的概念。 知识点归纳1指针与指针变量的概念。 (1)指针就是内存中的一个存储单元的 (1)指针就是内存中的一个存储单元的地址,即内存单元的编号。 (2)指针变量是一个能,即内存单元的编号。 (2)指针变量是一个能存放地址值的变量。 通过它存放的地址值能间接访问它所指向的变量。 通过它存放的地址值能间接访问它所指向的变量。 2指针变量的定义。 类型名*指针变量名类型说明中可取C语言的有效类型,*表示为指针型变量。 如char*c1,*c2;表示c1与c2是指针变量,其基类型是字符型。 类型说明中可取C语言的有效类型,*表示为指针型变量。 如char*c1,*c2;表示c1与c2是指针变量,其基类型是字符型。 注意指针的基类型与其所指向的变量的类型要统一。 3.指针变量的使用方法 (1)使指针变量指向某个变量,(即将某变量的地址值赋给指针变量)例int x;int*p=&x;或int x,*p;p=&x; (2)用间址运算(运算符为*)访问所指变量,例*p=5;/用作左值时代表所指的变量x=*p+9;/用作右值时代表所指变量的值注意指针变量在使用之前一定要指向某变量,而不能用常数直接赋值4指针运算的优先级与结合性(主要涉及*、&、+、-)。 单目运算符优先级是相同的,但从右向左结合。 重点理解 (1)*&a等同于a;&*p等同于&a。 (2)*p+等同于*(p+) (3)*+p等同于*(+p)。 重点理解 (1)*&a等同于a;&*p等同于&a。 (2)*p+等同于*(p+) (3)*+p等同于*(+p)。 (4)(*p)+与*(p+)的区别。 (*p)+是变量值增值,相当于a+;而*(p+)则是用完当前值后,指针值增值*(p+)则是用完当前值后,指针值增值,即相当于a,p+,是指向了新的地址。 5指针与一维数组(整型数组) (1)数组的地址:即数组中首个元素 (1)数组的地址:即数组中首个元素a0的地址。 (2)数组地址的表示方法: (1)用数组名。 (2)数组地址的表示方法: (1)用数组名a a, (2)取首元素的地址,即&a0 (3)数组指针指向数组的指针变量的简称,即指针变量中存放的是某数组的首地址。 例,若有int a10,*p; (3)数组指针指向数组的指针变量的简称,即指针变量中存放的是某数组的首地址。 例,若有int a10,*p;p=&a;则可称p为a数组的指针,或称p指向数组a。 (4)指针与数组的关系通过移动指针使其指向不同的数组元素p,(p+1),(p+2),(p+9)等同于&a0,&a1,&a2,&a9。 *p,*(p+1),*(p+2),*(p+9)等同于a0,a1,a2,a9。 (5)总结一维数组元素的合法引用方式方式一,或称p指向数组a。 (4)指针与数组的关系通过移动指针使其指向不同的数组元素p,(p+1),(p+2),(p+9)等同于&a0,&a1,&a2,&a9。 *p,*(p+1),*(p+2),*(p+9)等同于a0,a1,a2,a9。 (5)总结一维数组元素的合法引用方式方式一,数组名下标,例如a0,a1,方式二,方式二,指针名下标,例如p0,p1,方式三,方式三,)*(指针名+下标),例如*p,*(p+0),*(p+1),方式四,,方式四,)*(数组名+下标),例如*a,*(a+0),*(a+1),(在C中,数组名就是第一个元素的地址,因此对数组的引用可以直接用*a表示a0,用*(a+1)表示a1,用*(a+2)表示a2,用*(a+9)表示a9。 ),(在C中,数组名就是第一个元素的地址,因此对数组的引用可以直接用*a表示a0,用*(a+1)表示a1,用*(a+2)表示a2,用*(a+9)表示a9。 )6.数组名或数组指针作函数参数属于数组、指针、函数的综合应用,注意函数调用时传值和传址的区别 (1)形参为普通变量时是传值调用 (2)形参为指针变量时是传址调用例1传值调用(形参为普通变量,调用后形参不会影响实参)#includevoid fun(int a,int b)a+;b+;void main()int x=3,y=4,z;fun(x,y);printf(%d,%dn,x,y);例2传址调用(形参为指针,调用后形参值影响实参)属于数组、指针、函数的综合应用,注意函数调用时传值和传址的区别 (1)形参为普通变量时是传值调用 (2)形参为指针变量时是传址调用例1传值调用(形参为普通变量,调用后形参不会影响实参)#includevoid fun(int a,int b)a+;b+;void main()int x=3,y=4,z;fun(x,y);printf(%d,%dn,x,y);例2传址调用(形参为指针,调用后形参值影响实参)#includevoid fun(int*a,int*b)(*a)+;(*b)+;void main()int x=3,y=4,z;fun(&x,&y);printf(%d,%dn,x,y);例3传址调用(形参为指针,可利用此类形参返回多个结果)#includevoid fun(int a,int b,int*c,int*d)*c=a+b;*d=a*b;void main()int x=3,y=4,k,j;fun(x,y,&z,&j);printf(%d,%dn,k,j);例4传址调用(形参为数组名)#includevoid fun(int b,int i)bi=0;void main()int a10=0,1,2,3,4,5,6,7,8,9,i;fun(a,5);for(i=0;i10;i+)printf(%d,ai);#includevoid fun(int*a,int*b)(*a)+;(*b)+;void main()int x=3,y=4,z;fun(&x,&y);printf(%d,%dn,x,y);例3传址调用(形参为指针,可利用此类形参返回多个结果)#includevoid fun(int a,int b,int*c,int*d)*c=a+b;*d=a*b;void main()int x=3,y=4,k,j;fun(x,y,&z,&j);printf(%d,%dn,k,j);例4传址调用(形参为数组名)#includevoid fun(int b,int i)bi=0;void main()int a10=0,1,2,3,4,5,6,7,8,9,i;fun(a,5);for(i=0;i10;i+)printf(%d,ai);7指针与一维数组(字符数组)用指针方式与用字符数组方式操作字符串的区别 (1)存储方式不同。 字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串首个字符的地址),决不是将字符串放到字符用指针方式与用字符数组方式操作字符串的区别 (1)存储方式不同。 字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串首个字符的地址),决不是将字符串放到字符指针变量中。 (2)赋值方式不同。 对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值。 指针变量中。 (2)赋值方式不同。 对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值。 char str20;str=Good luck!;而对字符指针变量,可以采用下面方法赋值而对字符指针变量,可以采用下面方法赋值char*str;str=Good luck!;赋给str的不是字符,而是字符串第一个元素的地址。 (3)输入方式不同。 对字符数组可用如下方式赋值char str20;scanf(%s,str);/ok但对字符指针变量则不建议用此方式,因为会发生指针的异常指向,正确做法为char*str,a20;赋给str的不是字符,而是字符串第一个元素的地址。 (3)输入方式不同。 对字符数组可用如下方式赋值char str20;scanf(%s,str);/ok但对字符指针变量则不建议用此方式,因为会发生指针的异常指向,正确做法为char*str,a20;str=a;/使指针有明确的指向scanf(%s,str); (4)字符指针变量的值是可以改变的,而字符数组名的值是不可以改变的。 例1#includevoid main()char scanf(%s,str); (4)字符指针变量的值是可以改变的,而字符数组名的值是不可以改变的。 例1#includevoid main()char*str=Good luck!;puts(str);=Good luck!;puts(str);str+=5;/ok puts(str);例2#includevoid main()char puts(str);例2#includevoid main()char str20=Good luck!;puts(str);=Good luck!;puts(str);str+=5;/error!puts(str);puts(str);8.指针与二维数组(整型、字符型) (1)二维数组的按行存储若有int a23=1,2,3,4,5,6,*p=a;则*(p+4)=a11=5 (2)二维数组元素的地址表示及访问方式设int a23,*p;p=&a;可见a是23的数组,含有6个元素。 可认为a有两个元素a0和a1;而a0与a1又分别是具有三个元素的一维数组。 (1)二维数组的按行存储若有int a23=1,2,3,4,5,6,*p=a;则*(p+4)=a11=5 (2)二维数组元素的地址表示及访问方式设int a23,*p;p=&a;可见a是23的数组,含有6个元素。 可认为a有两个元素a0和a1;而a0与a1又分别是具有三个元素的一维数组。 a aa0所含元素为a00,a01,a02;a1所含元素为a10,a11,a12(可以记忆为二维数组a含有二个行元素,每个行元素又含有3个列元素)因此对于二维数组a,a0即&a00,也就是第0行的首地址。 a1就是&a10,也就是第一行的首地址。 由地址运算规则,a0+0就是&a00,a0+1就是&a01,a0+2就是&a02。 所以一般地ai+j=&aij.在二维数组中,可以用指针表示数组元素的地址,如ai+j=&aij也可写为*(a+i)+j=&aij,从而可知,*(*(a+i)+j)就是aij,即aij=*(*(a+i)+j)。 (可以记忆为二维数组a含有二个行元素,每个行元素又含有3个列元素)因此对于二维数组a,a0即&a00,也就是第0行的首地址。 a1就是&a10,也就是第一行的首地址。 由地址运算规则,a0+0就是&a00,a0+1就是&a01,a0+2就是&a02。 所以一般地ai+j=&aij.在二维数组中,可以用指针表示数组元素的地址,如ai+j=&aij也可写为*(a+i)+j=&aij,从而可知,*(*(a+i)+j)就是aij,即aij=*(*(a+i)+j)。 8函数与指针 (1)指针作为函数参数(知识点6) (2)函数的返回值为指针类型 (1)指针作为函数参数(知识点6) (2)函数的返回值为指针类型定义方式为类型*函数名();例#includeint z;例#includeint z;int*fun(int x,int y)z=x+y;return(int x,int y)z=x+y;return&z;void main()int a=3,b=4;int*c;c=fun(a,b);printf(%dn,*c);void main()int a=3,b=4;int*c;c=fun(a,b);printf(%dn,*c); (3)指向函数的指针变量 (3)指向函数的指针变量定义方式为类型(*变量名)();这里变量名前一个*号,说明该变量是指针变量,而后面有括号说明这个指针变量是指向函数的。 如int(*p1)();说明p1是指针变量,这个指针变量是指向函数的。 这里变量名前一个*号,说明该变量是指针变量,而后面有括号说明这个指针变量是指向函数的。 如int(*p1)();说明p1是指针变量,这个指针变量是指向函数的。 9指针数组与指向一维数组的指针变量 (1)指针数组一个数组,它的元素都为指针类型。 定义方式为类型说明*数组名整型常量表达式如char*s4;则定义了一个指针数组,即s0,s1,s2,s3均用来存放地址值,主要用于处理多个字符串。 如char*s4;则定义了一个指针数组,即s0,s1,s2,s3均用来存放地址值,主要用于处理多个字符串。 (2)指向一维数组的指针一个指针,指向一个一维数组定义形式是 (2)指向一维数组的指针一个指针,指向一个一维数组定义形式是类型说明(*变量)整型常量表达式如int(*p)4;定义p为指针变量,它指向的是一个具有四个元素的一维数组。 10指向指针的指针指向指针的指针也就是“二级指针”。 指向指针的指针也就是“二级指针”。 定义方式如下类型说明*指针变量名即定义一个二级指针变量,类型说明是它指向的指针变量所指向的变量的数据类型。 它所指向的指针变量称为一级指针变量。 即定义一个二级指针变量,类型说明是它指向的指针变量所指向的变量的数据类型。 它所指向的指针变量称为一级指针变量。 赋值形式为二级指针变量=&一级指针变量;这类似于张三有李四的地址,而王五有张三
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 提高围手术期护理质量
- 《联想与想象》课件
- 肝性脑病护理指导
- 集体土地搬迁补偿合同8篇
- 生产品质部年终总结
- 液压机理论讲解
- 《祝福》公开课课件
- 三方购房协议书7篇
- 广东省梅州市兴宁市2023-2024学年高一上学期第二次月考化学试题及答案
- 酒店会员卡制度培训大纲
- 数学高一-高一数学第一次月考卷01(考试版A4)【测试范围:必修第一册第一章~第二章】(人教A版2019)
- 质量信得过班组培训课件
- DL∕T 1768-2017 旋转电机预防性试验规程
- 农户化肥购买合同书
- 充电站运营管理制度(参考模板)
- 体育与健康教学设计《手倒立前滚翻》
- JJG 20-2001标准玻璃量器
- 2024外研版初中英语单词表汇总(七-九年级)中考复习必背
- 《大数据平台部署与运维》课程标准(含课程思政)
- 英语中的时间表达(示范课例)
- 《史记》上册注音版
评论
0/150
提交评论