注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

中吴南顾惟一笑

成功法则就是那19个字

 
 
 

日志

 
 

C语言的指针与数组  

2009-12-02 17:46:38|  分类: R&D |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1、指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址),它的步进是其所指对象的大小;

2、数组的本质则是一系列的元素(元素也可以是数组)。数组名对应着(而不是指向)一块内存,所以数组名不占用存储空间,其地址与容量在生命期内保持不变,当然数组的内容可以改变。索引比较方便。

3、当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。

对于int array[n], &array表示是指向数组的指针

int array[m][n]  可以看作int (array[m])[n] , &array[0]表示是指向数组的指针(int (*)[n]类型的)

指针和数组存在着一些本质的区别。

1)两者的内存布局不同
  数组需要在内存中占用若干字节的空间,这段内存区通过数组名来标志。指针则需要额外的4个字节的空间(32bit系统)来存放地址,这4个字节用名字指针变量名来标志。其中存放的地址几乎可以指向任何地方。

2)取下标的执行代码不同
        对于a[2]和p[2]编译器产生的执行代码却不一样。对于a[2],执行代码是从a的位置开始,向后移动2两个字节,然后取出其中的字符。对于p[2],执行代码是从p的位置取出一个地址,在其上加2,然后取出对应内存中的字符。


指针数组&数组指针&指向指针的指针

以二维数组来说明三者各自的适用场合。

   静态数组:各维确定,适用于整体空间需求不大的场合,此结构可方便索引,eg.a[m][n]。
   数组指针:低维确定,高维需要动态生成的场合,eg.a[*][n]。
   指针数组:高维确定,低维需要动态生成的场合,eg.a[m][*]。
   指向指针的指针:高、低维均需要动态生成的场合,eg.a[*][*]。

指向指针的指针的例子(兼有数组访问的灵活性)

  在做一个文本处理程序的时候,有这样一个问题:什么样的数据结构适合于按行存储文本?
        一行文本的字符个数或多或少不确定,整个文本所拥有的文本行数也是不确定的。这样的特征决定了使用指向指针的指针有很大的优越性。
  就横向而言,因为指针的灵活性,它可以指向随意大小的字符数组。
  就竖向而言,可以动态生成及扩展需要的指针数组的大小。
  评论这张
 
阅读(190)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017