首页 > 编程 > C++ > 正文

C++教程:C++指针与数组详解

2020-05-23 14:27:10
字体:
来源:转载
供稿:网友
我们在上一章说到,在向函数传递数组参数的时候,实质上是传递数组首元素的地址。那么数组和指针有着什么样的关系吗?

数组名的实质

数组名并不是一个普通的变量,而是一个指向数组首元素的指针。也就是说,我们可以用数组名来初始化一个对应类型的指针。既然如此,经过初始化的指针能否代替原来的数组名呢?答案是肯定的。

下面我们来看一段程序,了解数组名和指针的用法:(程序8.5)
#include "iostream.h"
int main()
{
   int a[6]={5,3,4,1,2,6};
   int *aptr=a;
   for (int i=0;i<6;i++)
   {
      cout <<a[i] <<aptr[i] <<*(aptr+i) <<*(a+i) <<endl;
   }
   return 0;
}

运行结果:
5555
3333
4444
1111
2222
6666

根据上面的这段程序,可以知道a[i]、aptr[i]、*(aptr+i)、*(a+i)都能够访问到数组的元素。所以,我们说上述四者是等价的。虽然数组名是指针,但它是一个指针常量。也就是说,不带下标的数组名不能作为左值。

指针数组

指针是一种数据类型,所以,我们可以用指针类型来创建一个数组。声明一个指针数组的语句格式是:
    指针类型 * 数组名[常量表达式];

对指针数组的操作和对指针变量的操作并无不同,在此不作赘述。

试试看:
如果有两个大小相同的数组a和b,我们想把数组b的元素都一一复制到数组a中,通过一句a=b;语句是否可以实现?试用本节的知识解释这一现象。
结论:数组名a和b都是指向数组首元素的指针,所以a=b;并不能把数组b的数据复制给数组a。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表