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