指针基本知识详解.docVIP

  1. 1、本文档共3页,可阅读全部内容。
  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文档。上传文档
查看更多
指针基本知识详解.doc指针基本知识详解.doc指针基本知识详解.doc

指针基础知识详解 学习编程的人都知道C语言是基础,而指针则是C语言的精华。在学习C语言时,指针就是我的弱项,现在假期没事就重新复习、整理了一下。下面是个人的一些心得与大家分享。 1.01 地址和指针的概念。 要想明白指针,就要弄清楚数据时怎样在内存中储存和读取的。在程序中一般是通过变量名来对内存单元来进行存取的。其实,程序经过编译过已经将变量名转化为变量的地址,对变量值的存取就是通过地址进行的。由于通过地址能找到所需的变量单元,我们可以说地址指向该变量单元。因此在C语言中将地址形象化成指针。 一个变量的地址称为该变量的指针。 如果有一个变量专门用来存放另一变量的地址(即指针),则称它为变量指针。指针是一个地址,而指针变量时存放地址的变量。 1.02 定义指针变量 基类型 *指针变量名; 下面的定义都是合法的: Float *a; Char *b; 可以用赋值语句是一个指针变量得到另一个变量的地址,从而使它指向该变量。例如: P=i; P2=j; 将变量i的地址放到指针变量p中,因此p就指向了变量i; 定义指针变量时要注意: 指针变量前面的“*”表示该变量的类型为指针型变量。指针变量名为p和p2而不是*p和*p2; 在定义指针变量时必须指定基类型。 一个指针变量只能指向同一个类型的变量, 1.03 指针变量的引用 特别要记住,指针变量只能存放地址,而不能将任何非地址类型的数据赋给一个指针变量。 关于*和的关系: *p的含义。和*是同级运算符,但是按照自由向左的运算方向结合; 如果有p_2=*p_1.它的作用是将a(a的地址)赋给p_2. *a的含义是先进行a运算,得到a的地址,在进行*运算。即a指向的变量,也就是变量a。 若*P=a,(*p)++相当于a++,括号是必要的。 1.04 数组与指针 一个变量有地址,一个数组包含若干元素,它们都有相应的地址。 所谓的数组元素的指针就是数组元素的地址。 对指针变量赋值: Int a[10] Int *p p=a[0]; 把a[0]元素的地址赋给指针变量p; C语言规定数组名(不包括形参数组名,形参数组名并不占据实际的内存空间)代表数组中首元素的地址: 下面两个是等价的: P=a[0]; P=a; 此时的数组名不代表整个数组; 在定义指针变量时了以对其赋值: Int *p=a[0]; 等价于: Int *p; P=a[0]; 当然定义时也可以写成: Int *p=a; 1.05 通过指针引用数组元素 这个地方就说重点的吧。 如果p的初值为a[0],,则: p+i和a+i就是a[i]的地址,它们指向a数组的第i个元素。这里注意:a代表首元素的地址,a+i也是地址。 *(p+i)或 *(a+i)是p+i或a+i所指向的数组元素,即a[i]。 可以看出,[ ]实际上是变址运算符,即a[i]按a+i 计算地址,然后再找出地址单元中的值。 指向数组的指针也可以带下标,如p[i]与*(p+i)等价。 1.06 指针变量的运算。 如果先使p指向数组a的首元素(即p=a)则: p++。使p指向下一个元素,即a[1]。 *p++。由于++和*同优先级,结合方向为自由向左,因此等价于*(p++).作用是先得到p指向的变量的值(即*p),然后再使p+1=p。 *(P++)与*(++p)的作用不同。 ++(*p)表示p所指向的元素加1,如果p=a。则++(*p)相当于++a[0]。注意:是元素值a[0]加1. 而不是指针p的值加1。 如果p当前指向a数组中的第i个元素。则*(p--)相当于a[i--];同样的有 *(++p)相当于a[++i]; 1.07 指针与多维数组。 这里用一个表格来说明。 表示形式 含义 地址 a 二维数组名,首地址 2000 a[0], *(a+0), *a 0行0列元素地址 2000 a+1 , a[1] 1行首地址 2008 a[1] , *(a+1) 1行0列元素a[1][0]地址 2008 a[1]+2,*(a+1)+2,a[1][2] 1行2列元素a[1][2]地址 2012 *(a[1]+2),*(*(a+1)+2),a[1][2] 1行2列元素a[1][2]的值 元素值为13 上面是等价的形式表示,只要把上面的记住和理解,二维数组与指针的关系就很容易明白了。 1.08 字符指针。 关于字符指针就不再详细说明。方法和上边的差不多。只要记住字符的一些格式就行了。

文档评论(0)

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

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

1亿VIP精品文档

相关文档