- 1、本文档共48页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言chap8[指针]
第8章 指针;8.1.1. 变量的指针和指向变量的指针变量;8.1.2.指针变量的定义; 与指针有关的运算符:
取地址运算符。 如:a为变量a的地址。
*间接引用运算符。 如:*p为指针变量p所指向的变量。
①指针变量p的内容为地址量;*p为指针p的目标量,内容为数据,即指针变量p所指向的变量的值。
p=i; 是将变量 i 的地址赋给指针变量p。
*p=j; 是将变量j的值赋给目标变量*p(即i)。
? * 运算和 运算互为逆运算。
(*p)的结果为p,即变量*p的地址;
*(i)表示访问变量 i 的地址,其结果就是 i 本身。
③ p为指针变量p的地址。;运行结果:
100, 10
100, 10;? 若先执行p1=a; 再执行*p1; 是什么意思? 这里“”和“*”的优先级相同,但按“自右至左”结合, 即*p1与a相同。;注意:此例中a和b并未交换,而p1和p2的值改变。;8.2 指针的运算
8.2.1 指针的算术运算
主要为 + - ++ --
P++ 、 p— 分别表示向后、向前移一个单元。
P+n、p-n 分别表示向后、向前移n个单元。
8.2.2 指针的关系运算
主要为 == 、 !=两种。
当两个指针p1与p2指向同一地址时,p1==p2为真,
当两个指针p1与p2不指向同一地址时,p1!=p2为真。;8.3.1 指向一维数组的指针
例:int a[10], *p;
p=a[0]; /? 将a[0]元素的地址赋给指针变量p ?/
在C中,数组名代表数组的首地址。因此p=a ; 与p=a[0];是等价的。
注:p = a ; 是将a 数组的首地址赋给指针变量p。但这里的a 并不代表整个数组。
可以通过指针引用数组元素
? 若p = a ; 是将整型数组a的首地址赋给整型指针变量 p,则 *p=5;是将整数5赋给a数组的第一个元素a[0],等价于a[0]=5 。
? p+1表示指针变量p当前所指的数组元素的下一个元素。但p+1 不是p的值加 1 。若有p=a[0]; 则 p+i (或a+i)就是 a[i] 的地址(因为a代表数组a的首地址)。
? 若有p=a[0]; 则*(p+i)或*(a+i)就是p+i或a+i所指向的数组元素,即a[i]。也就是说 *(p+i) = *(a+i) = a[i]。
? 指向数组的指针变量可以带下标,如:p[i] 与 *( p+i)是等价的。 ;也可写成如下:
main( )
{ int a[10], *p=a , i ;
for ( i=0; i10; i++) scanf(“%d”,p++);
printf(“\n”);
p=a; /? 此语句必不可少 ?/
for ( i=0; i10; i++, p++) printf(“%d”,*p);
};? 要注意指针变量的运算。如果p指向数组a (即p=a),则:
p++(或p+=1)表示p指向下一个元素;*p表示取得当前所指元素之值。
*p++等价于*(p++),相当于a[i++],表示先*p,再p+1?p。
*p– –等价于*(p– –),相当于a[i– –],表示先*p,再p–1?p。
*(++p) 相当于a[++i],表示p+1?p,再*p。
*(– –p) 相当于a[– –i],表示p–1?p,再*p。
(*p)++ 表示p所指之元素的值加1,不是指针值加1。即a[i]+1。; 设二维数组a定义如下:
static int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
? a 代表整个二维数组的首地址,也就是0行的首地址。a+1、a+2分别代表1行和2行的首地址。同样,a[0]或a[0][0]、a[1]或a[1][0]、a[2]或a[2][0]也分别代表0行、1行、2行的首地址。
? a[0]等价于*(a+0)、a[1]等价于*(a+1),? ,a[i]等价于*(a+i)。因此,a[0]+1和*(a+0)+1的值都是a[0][1];a[1]+2和*(a+1)+2的值为a[1][2]。
*(a+1)+2不能写成*(a+1+2),否则就变成*(a+3), 即a[3]。
? 因a[0]+1和*(a+0)+1是a[0][1]的地址,则*(a[0]+1)就是a[0][1]的值, 同理,*(*(a+0)+1)或*(*a+1)是a[0][1]的值,*(a[ i ]+ j)或*(*(a+i)+j )是a[ i
您可能关注的文档
- 9“我的信念”教学课件.ppt
- 9数模与模数转换.ppt
- 9穷人人教版优秀课件[修改]PPT.ppt
- 9第九章社会控制.ppt
- 9影视欣赏阿甘正传.ppt
- A12课程论文的研究与写作[11市营].ppt.ppt
- A02Oracle数据库入门.ppt
- 9课“中华文化的勃兴[二]”课件.ppt
- 9第9章仓储、物流搬运和包装[xiugai].ppt
- a9046349-4b50-440c-a8fb-9ef4c57be723体育授导型教案设计.ppt
- 2-红河州建筑施工安全生产标准化工地复核评分表(2022年修改版).docx
- 6.锡通项目2018年下半年工作会汇报材料(2018.7.9).docx
- 2018道路工程知识点汇总(新版).docx
- 附件3:月度生产例会安全汇报资料-站台门项目部.docx
- 附件2:广东建工集团2018年度科技成果汇总表.DOC
- 马武停车区、三汇停车区停车位管理系统,0#台账缺量.doc
- 攀成钢委办发〔2015〕19号(党风廉政建设责任考核与追究办法).doc
- 1-红河州建筑工程质量管理标准化复核评分表(2022年修改版).docx
- 中交第三公路工程局第四工程分公司项目经济合同结算管理办法(修订).doc
- 厂站安全操作规程汇编.doc
文档评论(0)