理论教育 《C语言程序设计应用教程》显示数组指针

《C语言程序设计应用教程》显示数组指针

时间:2023-11-21 理论教育 版权反馈
【摘要】:图9-6指针与一维数组的关系说明:p+i和a+i都是数组元素a[i]的地址。注意:p+1指向数组的下一个元素,而不是指针变量p的值加1,实际值为p + 1 * sizeof,也就是加上一个数组元素占用的字节数。对数组名或指向数组的指针进行加、减运算时,切记不能越界,即不能出现超越已定义的数组元素的下标。例9.4 利用指向数组的指针法输出数组全部元素的地址。

《C语言程序设计应用教程》显示数组指针

数组的起始地址赋值指针变量,则该指针变量就是指向数组的指针变量,其定义方法与指向普通变量的定义方法一样。例如:

int a[4] , * p =a;或者

inta[4], *p=&a[0];或者

inta[4], *p;

p=a;(或p=&a[0];)

以上3个程序段是等价的。指针与一维数组的关系如图9-6所示。

图9-6 指针与一维数组的关系

说明:

(1)p+i和a+i都是数组元素a[i]的地址。

(2) * (p+i)和* (a +i)都是数组元素a[i]。

(3)指向数组的指针变量也可作为数组名,按照加下标的方法来使用。

例如,a[i]等价于* (p+i), * (a+i),p[i] ,它们均表示数组元素a[i] 。

注意:

(1)p+1指向数组的下一个元素,而不是指针变量p的值加1,实际值为p + 1 * sizeof(数组元素基类型),也就是加上一个数组元素占用的字节数。如图9-6中,假设p的当前值为0x3000,则p+1为0x3000 + 1 * 4 = 0x3004,而非0x3001。

(2)不能出现数组名的自增、自减运算(a++、a--非法),但可以出现指向数组的指针的自增、自减运算(p++、p--合法),分别表示指针移动一个数组元素占用的存储单元(增加或减少)。

(3)对数组名或指向数组的指针进行加、减运算时,切记不能越界,即不能出现超越已定义的数组元素的下标。

(4)“ *p++”等价于“ *p; p=p+1; ” ,“ * (p +1)”等价于“p=p+1; * (p);”。

例9.4 利用指向数组的指针法输出数组全部元素的地址。

编写程序:(www.daowen.com)

创建一个名为“eg9_4.c”的新文件,在编辑窗口中输入下面的程序代码。

运行结果:

程序说明:

本程序首先定义整型数组和指针变量pt,利用循环结构实现指针的移动并调用printf ( )函数输出数组各元素的地址。从程序的运行结果可以看出:数组相邻元素的地址之差是一个数组元素占用的存储单元的大小(4个字节)。

本例也可以使用指针变量自增实现,关键代码如下:

或者利用指针变量加下标值的方法实现,关键代码如下:

例9.5 输出数组的全部元素。

编写程序:

创建一个名为“eg9_5.c”的新文件,在编辑窗口中输入下面的程序代码。

运行结果:

程序说明:

本程序分别使用下标法、数组名法和指针法输出数组元素,达到的效果是一样的,说明同一个问题可以用多种方法解决,需要读者灵活运用。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈