图8.3用指针修改数组元素的值使用指针变量表示数组元素示例。另外,在输出数组值的操作中,首先让指针变量p指向数组0号元素,然后通过循环控制中的p++运算,使得指针变量p依次指向a数组的其他元素,通过*p的方式表达数组元素值。程序执行的结果为:0010000如果有两个指针变量分别指向同一个数组的两个不同元素,则两个指针变量之间的距离表示了它们之间的差距有多少个数组元素。......
2023-11-20
假设定义一个一维数组,该数组在内存会有系统分配的一个存储空间,其数组的名字就是数组在内存的首地址。若再定义一个指针变量,并将数组的首址传给指针变量,则该指针就指向了这个一维数组。数组名是数组的首地址,也就是数组的指针。而定义的指针变量就是指向该数组的指针变量。对一维数组的引用,既可以用传统的数组元素的下标法,也可使用指针的表示方法。例如:
int a[10],*ptr; /*定义数组与指针变量*/
ptr=a;(或ptr=& a[0];)
则ptr就得到了数组的首址。其中,a是数组的首地址,& a[0]是数组元素a[0]的地址。由于a[0]的地址就是数组的首地址,所以两种赋值操作效果完全相同。指针变量ptr就是指向数组a的指针变量。
下面介绍C语言规定的指针对数组的表示方法:
(1)ptr+n与a+n表示数组元素a[n]的地址,即 & a[n]。对整个a数组来说,共有10个元素,n的取值为0~9,则数组元素的地址就可以表示为(ptr+0)~(ptr+9)或(a+0)~(a+9),与 & a[0]~ & a[9]保持一致。
(2)根据数组元素的地址表示方法,*(ptr+n)和*(a+n)就表示为数组的各元素(即等效于a[n])。
(3)指向数组的指针变量也可用数组的下标形式表示为ptr[n],其效果相当于*(ptr+n)。
例7.10 输入10个数,以数组的不同引用形式输出数组各元素的值。
例7.11 输入10个数,采用指针变量表示的地址法输入输出数组各元素。
例7.12 输入10个数,采用数组名表示的地址法输入输出数组各元素。
例7.13 输入10个数,用指针表示的下标法输入输出数组各元素。
例7.14 输入10个数,利用指针法输入输出数组各元素。
2.指针与二维数组(www.chuimin.cn)
定义一个二维数组:
int a[3][4];
其中a是二维数组的首地址,& a[0][0]既可以看作数组a第0行0列的首地址,也可以看作是二维数组的首地址。a[0]是第0行的首地址,当然也是数组的首地址。同理a[n]就是第n行的首址,& a[n][m]就是数组元素a[n][m]的地址。既然二维数组每行的首地址都可以用a[n]来表示,就可以把二维数组看成是由n行一维数组构成,将每行的首地址传递给指针变量,行中的其余元素均可以由指针来表示。
若定义的二维数组其元素类型为整型,每个元素在内存占2个字节,假定二维数组从1000存储单元开始存放,则以按行存放的原则,数组元素在内存的存放地址为1000~1023。
若用地址法来表示数组各元素的地址,对元素a[1][2]而言,& a[1][2]是其地址,a[1]+2也是其地址。分析a[1]+1与a[1]+2的地址关系,它们地址的差并非整数1,而是一个数组元素的所占位置2,原因是每个数组元素占2个字节。
对0行首地址与1行首地址a与a+1来说,地址的差同样也并非整数1,是一行,即4个元素占的字节数8。
由于数组元素在内存是连续存放的,若给指向整型变量的指针传递数组的首地址,则该指针指向二维数组。
int*ptr,a[3][4];
ptr=a;
则用ptr++就能访问数组的各元素。
例7.15 用地址法输入输出二维数组各元素。
#include<stdio.h>
例7.16 用指针法输入输出二维数组各元素。
有关C语言程序设计 第2版的文章
图8.3用指针修改数组元素的值使用指针变量表示数组元素示例。另外,在输出数组值的操作中,首先让指针变量p指向数组0号元素,然后通过循环控制中的p++运算,使得指针变量p依次指向a数组的其他元素,通过*p的方式表达数组元素值。程序执行的结果为:0010000如果有两个指针变量分别指向同一个数组的两个不同元素,则两个指针变量之间的距离表示了它们之间的差距有多少个数组元素。......
2023-11-20
指针数组是一组有序的指针的集合。用一维指针数组处理二维数组示例。程序一次运行的结果为:11415019618955311556532879428指针数组还常用于处理若干个相关的一维数组,此时指针数组中的每个元素指向一个一维数组的首地址。上面程序综合使用了指针数组和二级指针变量,在数据对象的定义和初始化阶段完成后形成的处理结构如图8.9所示。......
2023-11-20
,常数n};例如:int a1[5]={1,2,3,4,5};一维数组的初始化可以用以下方法实现:①数组初始化时,给出全部数组元素的初始值。②输出数组元素值。......
2023-11-20
图5.3指针变量指针变量本身也是变量,所以指针变量在使用之前也需要定义。为指针变量赋值的方法有两种:一种是定义后,使用赋值语句的方式;另外一种是定义的同时进行初始化方式。......
2023-11-20
在C语言中,二维数组是由一维数组作元素的一维数组。当需要用指针指向二维数组时,可以采用一级指针变量和二级指针变量两种处理形式。表8.3指向若干元素构成的一维数组指针变量表示二维数组元素使用指向由若干个元素组成的一维数组的指针处理二维数组。......
2023-11-20
例如,有如下所示的C语句序列:则结构体指针变量p1指向结构体数组元素a[2],其关系如图10.2所示。此时应该注意到被指针变量p1指向的结构体数组元素本身是不能作为整体操作的,所以*p1也不能作为整体操作。......
2023-11-20
从二维数组的角度看,数组名array 代表整个二维数组的首地址,也是第0 行的首地址。所以,&array[i]和array+i 等价,都是指向二维数组的第i 行。array[i]+j 指向二维数组array[i][j]。*就是数组元素 array[i][j]的值。计算 array[i][j]在数组中的相对位置为“i×m+j”,*就是数组array[i][j]的值。使用指针变量输出二维数组任一行任一列元素的值。图6.12程序运行结果说明:在主函数中定义了一个指针变量p,指向数组array 第0 行第0 列。p+是二维数组array 第i 行第j 列的地址。......
2023-10-21
当指针变量指向一维数组的首元素时,称为指向了一维数组。所以,函数中一维数组形式参数可以用同类的指针形式参数替代;同理也可以用指向特定数组的指针变量来传递数组类实际参数。特别需要注意的是,函数的形式参数无论使用的是数组名形式还是指针变量形式,本质上都是一个指针变量,在被调函数中既可以将它当作数组名使用也可以将它当作指针变量使用。......
2023-11-20
相关推荐