首页 理论教育C++程序设计基础教程-指针与数组关系

C++程序设计基础教程-指针与数组关系

【摘要】:在C++中,数组和指针密切相关,几乎可以互相使用。数组名字可以认为是常量指针,它指向存放数组第一个元素的内存地址。指针可以用于完成任何涉及数组下标的操作。实际上,数组下标表示法在编译期间将转换为指针表示法,所以用指针方式来书写数组下标表达式可以节省编译时间。如果再定义一个字符指针:char*pname=name;则name[i]、*和*具有相同的值,都是数组第i+1个元素的值。分析以下程序的执行结果。

在C++中,数组指针密切相关,几乎可以互相使用。数组名字可以认为是常量指针,它指向存放数组第一个元素的内存地址。指针可以用于完成任何涉及数组下标的操作。

实际上,数组下标表示法在编译期间将转换为指针表示法,所以用指针方式来书写数组下标表达式可以节省编译时间。

例如,对于下面的数组定义:

char name[10]="Smith";

name等于&name[0]。

如果再定义一个字符指针:

char*pname=name;(www.chuimin.cn)

则name[i]、*(*pname+i)和*(name+i)具有相同的值,都是数组第i+1个元素的值。而且&name[i]、name+i和pname+i也具有相同的值,都是数组第i+1个元素所在的位置。下列例子可以验证这一说法的正确性。

【例1.24】分析以下程序的执行结果。

上述程序中,定义了一个短整型数组a(含10个元素)和一个该数组元素的指针pa,首先pa指向数组a的第一个元素,则有a[i]=*(p+i)=*(a+i),&a[i]=a+i=pa+i。程序的执行结果如下:

其中,输出值0x0012FF3A是程序执行时为a数组动态分配的内存地址,读者执行该程序时不一定是这个值。

注意:虽然数组名和指针在引用数组元素和取得它们的地址方面可以互换,但两者有一个重要的不同点:数组名是在定义时就已分配好了内存空间的,因此,数组名是一个地址常量,在程序中不能将数组名作为变量为其赋值,而指针是一个变量,可以多次赋值。