- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数组指针和指针数组的区别
数组指针与指针数组的区别C/C++中有两个非常容易混淆的十分常用的但是又特别不引起人注意的两个概念,指针数组和数组指针,或许你已经对这两个概念早有耳闻,但是不知你有没有对他们做过细致的分析来区别二者呢?下面我们来看下百度百科上是如何对二者进行定义的。数组指针(也称行指针)数组指针:数组名本身就是一个指针,指向数组的首地址。注意这是声明定长数组时,其数组名指向的数组首地址是常量。而声明数组并使某个指针指向某个数组的地址(不一定是首地址),指针取值可以改变。定义方法:int (*p)[n];由于()优先级高[]的优先级,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。p=a;//将该二维数组的首地址赋给p,也就是a[0]或a[0][0]p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]所以数组指针也称指向一维数组的指针,亦称行指针。指针数组一个数组,若其元素均为指针类型数据,称为指针数组。也就是说,指针数组中每一个元素都相当于一个指针变量。其详细形式应该如下:*a[0],*a[1], ... ,*a[n],每一个数组里面存储的是其指向的地址;一维指针数组的定义形式为:类型名 *数组名[数组长度]定义方法:int *p[n];由于[]优先级高与*的优先级,先与p先与[n]结合成为一个p[n]数组,再由int*说明这数组是指针类型的,它有n个指针类型的数组元素,每个数组元素都指向一个整型变量。这里执行p+1是错误的,这样赋值也是错误的:p=a; 因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址,之间没有任何关系。但可以这样*p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。例如:int *p[4],由于[]比*优先级更高,因此p先与[4]结合,形成p[4]的形式,这显然是数组形式。然后再与p前面的*结合,*表示此数组是指针类型的,每个数组元素都指向一个整型变量。如要将二维数组赋给一指针数组:int *p[4]; //定义一个 一维的有三个int *型指针的元素的 数组int a[4][4]; //定义一个3行4列的二维数组for(i=0;i4;i++) //将二维数组的每行首地址赋给指针数组的每个元素p[i]=a[i];这里int *p[4] 表示一个一维数组内存放着四个指针变量,分别是p[0]、p[1]、p[2]、p[3],所以要分别赋值。这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。比如要表示数组中i行j列一个元素:(前提是指针要按上面的方法赋值)*(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j]优先级:从上面的两个例子对比分析中我们可以清楚的知道二者的区别,关键就在于*和[]优先级上的问题。从上面的两个例子中,我们可以知道()、[]、*之间的优先级如下:优先级:()[]*(全文完)
文档评论(0)