指针和数组的联系 |
您所在的位置:网站首页 › 数组和指针作为函数的参数有什么联系与区别 › 指针和数组的联系 |
指针与数组的区别和联系
2010-06-27 22:29:04
分类:
C/C++
一.指针与数组的联系:
指针与数组是 C 语言中很重要的两个概念,它们之间有着密切的关系,利 用这种关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针 与数组之间的联系及在编程中的应用。
1 .指针与数组的关系
当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。如:
char str[20], *ptr;
ptr=str;
ptr 被置为数组 str 的第一个元素的地址,因为数组名就是该数组的首地址, 也是数组第一个元素的地址。 此时可以认为指针 ptr 就是数组 str (反之不成 立),这样原来对数组的处理都可以用指针来实现。如对数组元素的访问,既 可以用下标变量访问,也可以用指针访问。
2 .指向数组元素的指针
若有如下定义:
int a[10], *pa;
pa=a;
则 p=&a[0] 是将数组第 1 个元素的地址赋给了指针变量 p 。
实际上, C 语言中数组名就是数组的首地址,所以第一个元素的地址可以 用两种方法获得: p=&a[0] 或 p=a 。
这两种方法在形式上相像,其区别在于: pa 是指针变量, a 是数组名。值 得注意的是: pa 是一个可以变化的指针变量,而 a 是一个常数。因为数组一经 被说明,数组的地址也就是固定的,因此 a 是不能被赋值不能改变的,不允许 使用 a ++、++ a 或语句 a + =10 ,而 pa ++、++ pa 、 pa + =10 则是正确的。 由此可见,此时指针与数组融为一体。
3 .指针与一维数组
理解指针与一维数组的关系,首先要了解在编译系统中,一维数组的存储 组织形式和对数组元素的访问方法。
一维数组是一个线形表,它被存放在一片连续的内存单元中。 C 语言对数 组的访问是通过数组名(数组的起始地址)加上相对于起始地址的相对量(由 下标变量给出),得到要访问的数组元素的单元地址,然后再对计算出的单元 地址的内容进行访问。通常把数据类型所占单元的字节个数称为扩大因子。
实际上编译系统将数组元素的形式 a[i] 转换成 *(a + i) ,然后才进行运算。对 于一般数组元素的形式: [] ,编译程序将其转换成: *( + ) ,其中下标表达式为:下标表达式 * 扩大因子。整个式 子计算结果是一个内存地址,最后的结果为: *= 。由此可见, C 语言对数组的处理,实际上是转换成指针地址的运算。
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |