2012程序员试强化.docVIP

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

指 针 (一)变量的指针和指向变量的指针变量 1、变量的指针就是指变量的地址。 2、指针变量:用来专门存放地址的变量 例如:int a 5,*p a; *代表取后面所表示的地址中的内容。 代表取后面内容所存放的地址。 3、指针变量可作为函数的参数 此时,形参与实参是共用一个内存空间的。注意是以指针变量,还是以指针变量的内容作为参数 (二)数组的指针和指向数组的指针变量 1、数组的指针就是数组的起始地址,数组元素的指针就是指存放数组元素的地址。 2、指向数组元素的指针。 这里的定义与指向变量的指针定义相同。只是这时给变量赋值是不是普通变量的地址,而是数组元素的地址。例如:int a[10],b,*p a; 在C中规定:数组名就代表数组的首地址,因此a与a[0]在值上是等价的。故:p a可写成p a[0]; 3、通过指针引用数组元素。 定义一个指向数组元素的指针p,然后将一个存在的数组的首地址给p,然后就可以通过p来引用数组中的元素。 C中规定:如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素(而不是将p的值简单加1)。例如:数组元素是实型,每个元素需要占4个字节,则p+1意味着使p的值(地址)加4个字节,以使它指向下一个元素。 我们看一个例子:int a[10],*p a; 1 p+I和a+I就是a[I]的地址,即,p+I,a+I,a[I]三者等价。其中a+I中的I跟p+I中的I的意义一样。 2 * p+I 或* a+I 或a[I]是指数组的元素。而且三者是代表同一个元素。 3 指向数组的指针变量也可以跟数组名一样使用下标来引用。即p[I]与a[I]等价。 4、几个注意点: (1)指针变量可以实现自身的值的改变。如:p++;而数组名则不允许,如:a[10]中,a代表数组a的首地址,如果可以自加运算的话,也就是数组在内存中存放的位置是随意变化的这是不可能的,因为只要分配空间后,不可能再移动的。故:a++是错误的。 (2)要注意指针变量当前值。 因为指针在移动后,如果不进行复位,则它不能象数组名一样每次使用时都代表首地址,故当指针移动时可能超出范围。 (3)指针变量的运算 ①p++使p指向下一个元素。 ②*p++,由于++和*同优先级,结合方向为自右向左,因此它等价于* p++ 。作用是:先得到p指向的变量的值(即*p),然后再使p+1→p。 ③* p++ 与* ++p 作用不同。前者是先取*p,后使p加1;后者是先使p加1,再取*p。 ④(*p)++表示p所指向的元素值加1 5、指向多维数组的指针和指针变量 (1)多维数组的地址。(以二维数组为例) 这里我们可以将二维数组看成一维数组的一维数组。如:int a[10][10]; 对第一行:a[0][I]:可以看成是数组名为a[0]的一维数组。其它的同理。故如果写出a[0]+1,当然就代表a数组中的第二行的首地址,而不是a数组中的第二个元素的地址。 * a[0]+1 同样代表第二行的首地址,只是此时将该表达式加1时,不是在跑到下一行啦,而是在本行朝后移一个,也就是下一个元素的地址啦。下表小结: 6、字符串的指针和指向字符串的指针变量 (1)字符串的指针:指字符串的首地址。 (2)字符串的表示形式 ①用字符数组存放一个字符串。如:char str1[] ”china”,str2[] “china” ,str3 ‘a’,’b’,’\0’ ②用字符指针指向一个字符串。如:char*str1 ”china”;char*str1;str1 ”china”;这里是指将字符串的首地址赋给str1; 注意:char*a;scanf “%s”,a ;这种方法C不会提示错误,但是不允许的,因为指针变量a,定义了,但没有指它指定具体的空间,故无法正确存放你输入的字符串。 7、指针运算小结 ①指针变量加(减)一个整数 C语言规定,一个指针变量加(减)一个整数并不是简单地将指针变量的原值加(减)一个 整数,而是将该指针变量的原值(是一个地址)和它指向的变量所占用的内存单元字节数相 加(减)。如p+I代表地址计算:如果p为整型,则该式代表p+I*2; ②指针变量赋值 将一个变量地址赋给一个指针变量。 Int*p,a 100;p a; ③指针变量可以有空值,即该指针变量不指向任何变量,表示成p NULL,其中NULL是 整数0. ④两个指针变量可以相减 如果两个指针变量指向同一个数组元素,则两个指针变量值之差是两个指针之间的元素 个数,但两个指针变量相加就没有实际意义啦。 ⑤两个指针变量比较 若两个指针指向同一个数组元素,则可以进行比较。 结构体 结构体属于构造类型,前面我们已学过的数组,它中间的各元素是属于同一类型的。但这远远不足,我们大量的是需要同一个数据中能包含多个不同

文档评论(0)

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

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

1亿VIP精品文档

相关文档