将数组的起始地址赋值给指针变量,则该指针变量就是指向数组的指针变量,其定义方法与指向普通变量的定义方法一样。例如:
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”的新文件,在编辑窗口中输入下面的程序代码。
运行结果:
程序说明:
本程序分别使用下标法、数组名法和指针法输出数组元素,达到的效果是一样的,说明同一个问题可以用多种方法解决,需要读者灵活运用。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。