《2022年指针知识点总结 .pdf》由会员分享,可在线阅读,更多相关《2022年指针知识点总结 .pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、指针及其应用关于指针的考点( 1224 分) :指针与指针变量的概念、指针与地址运算符。变量、数组、字符串、函数、结构体的指针, 以及指向变量、数组、字符串、函数、结构体的指针变量,通过指针引用以上各类型数据。用指针作函数参数。返回指针值的指针函数。指针数组、指向指针的指针。main 函数的命令行参数。知识点归纳:1指针与指针变量的概念。(1)指针:就是内存中的一个存储单元的地址,即内存单元的编号。(2)指针变量:是一个能存放地址值的变量 。通过它存放的地址值能间接访问它所指向的变量。2指针变量的定义。类型名 * 指针变量名类型说明中可取C语言的有效类型, * 表示为指针型变量。如:char
2、*c1,*c2; 表示 c1 与 c2 是指针变量,其基类型是字符型。注意:指针的基类型与其所指向的变量的类型要统一。3. 指针变量的使用方法(1)使指针变量指向某个变量, (即将某变量的地址值赋给指针变量)例:int x; int *p=&x; 或int x ,*p; p=&x ; (2)用间址运算(运算符为*)访问所指变量, 例:*p=5;/用作左值时代表所指的变量x=*p+9;/用作右值时代表所指变量的值注意:指针变量在使用之前一定要指向某变量,而不能用常数直接赋值4指针运算的优先级与结合性(主要涉及*、&、+、- - ) 。单目运算符优先级是相同的,但从右向左结合。重点理解:(1)*&
3、a 等同于 a; &*p 等同于 &a。(2)*p+等同于 *(p+)(3)*+p 等同于 *(+p) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - (4) (*p)+与*(p+)的区别。(*p)+是变量值增值 ,相当于 a+;而*(p+)则是用完当前值后,指针值增值,即相当于 a, p+ ,是指向了新的地址。5指针与一维数组(整型数组)(1)数组的地址 : 即数组中首个元素a0 的地址 。(2)数组地址的表示方法 : (1)
4、用数组名 a,(2) 取首元素的地址,即 &a0(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)总结:一维数组元素的合法引用方式方式一, 数组名 下标 , 例如 a0 ,a1 ,,方式二,
5、 指针名 下标 ,例如 p0 ,p1 ,,方式三, *(指针名 +下标) ,例如*p,*(p+0),*(p+1), ,方式四, *(数组名 +下标) ,例如*a,*(a+0),*(a+1), ,(在 C 中,数组名就是第一个元素的地址,因此对数组的引用可以直接用*a 表示a0 ,用*(a+1) 表示 a1 ,用*(a+2) 表示 a2 ,, ,用 *(a+9) 表示 a9 。 )6. 数组名或数组指针作函数参数属于数组、指针、函数的综合应用,注意函数调用时传值和传址的区别:(1)形参为普通变量时是传值调用(2)形参为指针变量时是传址调用例 1:传值调用(形参为普通变量, 调用后形参不会影响实参
6、)#include void fun(int a,int b) a+; b+; void main() int x=3,y=4,z; fun(x,y); printf(%d,%dn,x,y); 例 2:传址调用(形参为指针,调用后形参值影响实参)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - #include void fun(int *a,int *b) (*a)+; (*b)+; void main() int x=3,y=
7、4,z; fun(&x,&y); printf(%d,%dn,x,y); 例 3 传址调用(形参为指针,可利用此类形参返回多个结果)#include void 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 传址调用(形参为数组名)#include void 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);
8、for (i=0;i10;i+) printf(%d,ai); 7指针与一维数组(字符数组)用指针方式与用字符数组方式操作字符串的区别:(1)存储方式不同。字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串首个字符的地址),决不是将字符串放到字符名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - 指针变量中。(2)赋值方式不同。对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值。char s
9、tr20; str=Good luck!;而对字符指针变量,可以采用下面方法赋值:char *str; str=Good luck!;赋给 str的不是字符,而是字符串第一个元素的地址。(3)输入方式不同。对字符数组可用如下方式赋值: char str20; scanf(%s,str); /ok 但对字符指针变量则不建议用此方式, 因为会发生指针的异常指向,正确做法为:char *str,a20; str=a; /使指针有明确的指向scanf(%s,str); (4)字符指针变量的值是可以改变的,而字符数组名的值是不可以改变的。例 1:#include void main() char *st
10、r =Good luck!; puts(str); str+ =5; /ok puts(str); 例 2:#include void main() char str20=Good luck!; puts(str); str+ =5; /error!名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 7 页 - - - - - - - - - puts(str); 8. 指针与二维数组(整型、字符型)(1)二维数组的按行存储若有 int a23=1,2,3,4,5,6,*p=
11、a; 则*(p+4)=a11=5 (2)二维数组元素的地址表示及访问方式设 int a23,*p;p=&a ;可见 a 是 23 的数组,含有 6 个元素。可认为 a 有两个元素:a0 和 a1 ; 而 a0与 a1 又分别是具有三个元素的一维数组。aa0 所含元素为 :a00,a01,a02;a1 所含元素为 :a10,a11,a12( 可以记忆为:二维数组a 含有二个行元素,每个行元素又含有3 个列元素 ) 因此对于二维数组a, a0 即&a00, 也就是第 0 行的首地址。a1 就是&a10,也就是第一行的首地址。由地址运算规则,a0+0就是 &a00, a0+1就是 &a01,a0+2
12、就是&a02。所以一般地: ai+j=&aij. 在二维数组中,可以用指针表示数组元素的地址,如:ai+j=&aij也可写为*(a+i)+j=&aij, 从 而 可 知 , *(*(a+i)+j)就 是aij, 即aij= *(*(a+i)+j)。8函数与指针(1)指针作为函数参数(知识点6)(2)函数的返回值为指针类型定义方式为: 类型 * 函数名();例:#include int z; int *fun(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); 名师
13、资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - - - - - - - - (3)指向函数的指针变量定义方式为:类型(*变量名) ();这里变量名前一个 *号,说明该变量是指针变量,而后面有括号说明这个指针变量是指向函数的。如: int (*p1)( ); 说明 p1 是指针变量,这个指针变量是指向函数的。9指针数组与指向一维数组的指针变量(1)指针数组: 一个数组,它的元素都为指针类型。定义方式为: 类型说明 * 数组名 整型常量表达式 如:char *s4
14、;则定义了一个指针数组,即s0,s1,s2,s3均用来存放地址值,主要用于处理多个字符串。(2)指向一维数组的指针:一个指针,指向一个一维数组定义形式是: 类型说明(*变量) 整型常量表达式 如:int (*p)4;定义 p 为指针变量,它指向的是一个具有四个元素的一维数组。10指向指针的指针指向指针的指针也就是“二级指针”。定义方式如下: 类型说明 * 指针变量名即定义一个二级指针变量,类型说明是它指向的指针变量所指向的变量的数据类型。它所指向的指针变量称为一级指针变量。赋值形式为: 二级指针变量 =&一级指针变量;这类似于张三有李四的地址,而王五有张三的地址,这样王五通过张三找到李四。这样
15、张三是一级指针,而王五是二级指针。例如:#include void main()char *name = Follow me,BASIC ,Great Wall ,FORTRAN ,Computer design; char * ; int ;for(i=0;i1) +argv;printf(%s n,argv ) ;argc ; 在 DOS 命令状态下 输入的命令行为 : file1 China Beijing 则执行以上命令行将会输出以下信息:China Beijing 11. 有关指针的数据类型的小结定义含义int ;定义整型变量int *p;为指向整型数据的指针变量int an; 定义整型数组,它有个元素int *pn;定义指针数组,它由个指向整型数据的指针元素组成int (*p)n ;为指向含个元素的一维数组的指针变量int f( );为带回整型函数值的函数int *p( );为带回一个指针的函数,该指针指向整型数据int (*p)( ) ;为指向函数的指针,该函数返回一个整型值int *p ;是一个指针变量,它指向一个指向整型数据的指针变量名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -