网站大量收购独家精品文档,联系QQ:2885784924

C语言chap8[指针].pptVIP

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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

文档评论(0)

shaoye348 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档