博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一维指针与一位数组的关系(转载\整理)
阅读量:6425 次
发布时间:2019-06-23

本文共 710 字,大约阅读时间需要 2 分钟。

若有如下定义:

   int a[10], *pa;
   pa=a;
 
  则pa=&a[0]是将数组第1个元素的地址赋给了指针变量pa。
 
  实际上,C语言中数组名就是数组的首地址,所以第一个元素的地址可以用两种方法获得:pa=&a[0]或pa=a。
 
  这两种方法在形式上相像,其区别在于:pa是指针变量,a是数组名。值得注意的是:pa是一个可以变化的指针变量,而a是一个常数。因为数组一经被说明,数组的地址也就是固定的,因此a是不能变化的,不允许使用a++、++a或语句a+=10,而pa++、++pa、pa+=10则是正确的。由此可见,此时指针与数组融为一体。

  一维数组是一个线形表,它被存放在一片连续的内存单元中。C语言对数组的访问是通过数组名(数组的起始地址)加上相对于起始地址的相对量(由下标变量给出),得到要访问的数组元素的单元地址,然后再对计算出的单元地址的内容进行访问。通常把数据类型所占单元的字节个数称为扩大因子。

  实际上编译系统将数组元素的形式a[i]转换成*(a+i),然后才进行运算。对于一般数组元素的形式:<数组名>[<下标表达式>],编译程序将其转换成:*(<数组名>+<下标表达式>),其中下标表达式为:下标表达式*扩大因子。整个式子计算结果是一个内存地址,最后的结果为:*<地址>=<地址所对应单元的地址的内容>。由此可见,C语言对数组的处理,实际上是转换成指针地址的运算。
  数组与指针暗中结合在一起。因此,任何能由下标完成的操作,都可以用指针来实现,一个不带下标的数组名就是一个指向该数组的指针。

转载于:https://www.cnblogs.com/xhj-records/p/3115969.html

你可能感兴趣的文章
Win10系列:UWP界面布局进阶5
查看>>
ABP Zero 本地化语言的初始化和扩展
查看>>
转Hibernate 一对多关联的CRUD__@ManyToOne(cascade=(CascadeType.ALL))
查看>>
FCT需求分析
查看>>
开门人和关门人(杭电1234)
查看>>
万能adapter
查看>>
开发指南专题六:JEECG微云高速开发平台代码生成
查看>>
cocos2d-x 游戏优化方案
查看>>
1.3 Quick Start中 Step 6: Setting up a multi-broker cluster官网剖析(博主推荐)
查看>>
remote desktop connection manager
查看>>
开源库RxJava、ButterKnife
查看>>
JDK内置工具jstack(Java Stack Trace)(转)
查看>>
百度之星 / 初赛第二场 B题
查看>>
Http压测工具wrk使用指南
查看>>
Excel VBA 循环“我中毒了~”
查看>>
CSS 教程Part4 [盒子模型](摘录自 W3C School)
查看>>
android开发技巧
查看>>
五个有趣的拓扑变换问题 [转]
查看>>
asp.net中的比较完美的验证码
查看>>
HDU 3277 Marriage Match III(最大流+二分+并查集)
查看>>