- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章?指针
第一节 ?
指针是变量的地址,而变量的地址也就是内存地址。指针变量本身也是一种变量,与数据变量不同的是指针变量存放的是地址。
一、
指针变量的格式为:
????? 类型说明符 *指针变量名
例如:
int *p;?????? /*定义指针变量p,是指向int型变量的指针*/
1) 一个指针变量只能指向同一种类型的变量。
2) 指针变量名是p,不是*P。
3) 指针变量只能指向定义时所规定类型的变量。
4) 指针变量定义后,变量值不确定,应用前必须先赋值。
??二、指针变量的赋值
?指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。
C语言中提供了地址运算符来取变量的地址。其一般形式为
??? 变量名;
设有指向整型变量的指针变量p,如要把整型变量a的地址赋予P可以有以下两种方式:
(1)指针变量初始化的方法:
??? int a,*p=a;
(2)赋值语句的方法:
??? int? a,*p;
??? p=a;
不允许把一个数赋予指针变量,下面的赋值是错误的:
??? int? *p;
??? p=450;
被赋值的指针变量前不能再加*说明符,如写为*p=a也是错误的。?
1.指针变量可用其他运算符
(1) 赋值运算。
1)指针变量初始化赋值,例如;
??? int a;*pp=a;
2)把数组的首地址赋予指向数组的指针变量。例如:
?????? float b[10],*pf;
?????? pf=b;
3)把字符串的首地址赋予指向字符类型的指针变量。
?????? char *ps;
?????? ps=”你好!”;
4)把函数的入口地址赋予指向函数的指针变量。例如:
?????? int (*pf)();
?????? pf=max;??? ????????/*max为函数名*/
(2) 加减算术运算。对于指向数组的指针变量,可以加上或减去一个整数n。
指针变量加或减一个整数n的意义:是把指针指向的当前位置(指向某数组元素)向前或向后移动n个位置。
(3)两指针变量进行算术运算。
? 两指针变量之间可以进行减法运算,运算结果为整型数据。例如:
??? int a,b,*p1=a,*p2=b;
??? a=p1-p2;
(4)两指针变量进行关系运算。指向同一数组的两指针变量进行关系运算可表示它们所指数组元素之间的关系。例如:
??? pf1== pf2? 表示pfl和pf1指向同一数组元素
(5)空指针:空指针p=NULL表示p不指向任何数据,在头文件stdio h中,NULL被定义为0;
三、??????
?函数的参数可以为整型、字符型等数据,也可以为指针类型。当指针变量作为函数的参数时,其作用为将一个变量的地址传送到另一个函数中。
swap(int *p1,int *p2);
(1)C
(2)调用一次函数,最多只能得到一个返回值。当使用指针变量作为函数形参,可以得到多个变化的值。
第二节
?? 一、????????
由于数组名代表数组的首地址。把数组名赋给一个指针变量就可以定义一个指向数组的指针变量。例如:
??? char a[20] ,*p;????? p=a;
二、????????
一个指针变量既可以指向一个数组,也可以指向一个数组元素。
引用数组元素的方法:
(1)下标法:如a[i];使用下标法直观、比较费时。
(2)首地址加偏移量:如*(a+i)
(3)指针法:如*(p+i)
使用指针变量引用数组元素的注意事项:
(1)数组名是一个常量。假设a为数组名,则程序中出现a++或a+=l的表达式均为错误;
(2)指针变量的值可以改变。
(3)注意指针变量的当前值。
4.数组指针变量的运算
假设针变量p指向一个数组a,即p=a;则
(1)*P的作用为取指针变量p指向的变量的值即,*p=a[0]。
(2)p++或p+=1的作用为使p指向下一个元素。即p=a[1]。
(3)*p++的作用为先得到指针变量p指向的变量的值,然后再使p+1赋给p。等价于*(p++)。输出*p++或*(p++)的结果即输出a[0]的值。
(4)*(++p)的作用为先使p+1赋给p再取指针变量p指向的变量的值。输出*(++p)的结果即输出a[1]的值。
(5) (*p)++的含义为将指针变量p所指向的数组元素使加1。输出(*p)++的结果即输出a[0]+1的值。?
??? 三、????????
当需要函数之间进行多个数据的传递时,可以利用数组名作为函数的参数。由于数组名代表数组的首地址,当数组名作为函数的参数,传递的为数组的首地址,此时实参数组与形参数组将共占用同一段内存。如果被调函数对该段内存中的数据作了修改,即数组元素的值发生变化C函数调用结束后,实参数组各个元素的值也已经改变。所以在调用函数中再
文档评论(0)