首页 理论教育 《C语言程序设计》-指针数组的概念和区别

《C语言程序设计》-指针数组的概念和区别

时间:2023-10-29 理论教育 版权反馈
【摘要】:指针数组是一组有序的指针的集合。指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。需要注意的是指针数组和二维数组指针变量是有区别的。该二维数组的列数为3或分解为一维数组的长度为3。int*p[3]表示p是一个指针数组,有三个下标变量,p[0]、p[1]、p[2],均为指针变量。

《C语言程序设计》-指针数组的概念和区别

指针数组是一组有序的指针的集合。指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。指针数组说明的一般形式为:

类型说明符*数组名[数组长度

例如:

int*p[5];

表示p是一个指针数组,包含5个数组元素,每个元素都是一个指针,指向整型变量。在定义指针数组时,也可以对指针数组进行初始化。例如:

char*ps[]={”One”,”Two”,”three”};

定义了指针数组ps,系统自动计算机数组长度为3,即包含3个元素,每个元素都为指向字符的指针变量。ps[0]指向字符串“One”,ps[1]指向字符串“Two”,ps[2]指向字符串“Three”,即每个指针数组元素中都存放了对应的字符串首地址

【例7.26】输入月份(1-12),输出该月份所在的季节名称。

程序内容如下:

1 #include<stdio.h>

2 void main()

3 {

4  char*season[4]={“春季”,“夏季”,“秋季”,“冬季”};

5  int month;

6  printf(“请输入月份(1-12):”);

7  scanf(“%d”,&month);

8  switch(month)

9  {

10   case 12:case 1:case 2:printf(“%s\n”,season[0]);break;

11   case 3:case 4:case 5:printf(“%s\n”,season[1]);break;

12   case 6:case 7:case 8:printf(“%s\n”,season[2]);break;

13   case 9:case 10:case 11:printf(“%s\n”,season[3]);break;

14   default:printf(“输入错误!”);

15  }

16 }

程序结果如图7.31所示:(www.xing528.com)

图7.31 例7.26程序结果图

【例7.27】进行数字排列。

程序内容如下:

1 #include<stdio.h>

2 void main()

3 {

4  int a[3][3]={1,2,3,4,5,6,7,8,9};

5  int*pa[3]={a[0],a[1],a[2]};

6  int*p=a[0];

7  int i;

8  for(i=0;i<3;i++)

9   printf(“%d,%d,%d\n”,a[i][2-i],*a[i],*(*(a+i)+i));

10  for(i=0;i<3;i++)

11   printf(“%d,%d,%d\n”,*pa[i],p[i],*(p+i));

12 }

程序结果如图7.32所示:

图7.32 例7.27程序结果图

【例题中关键问题说明】

本程序中,pa是一个指针数组,三个元素分别指向二维数组a的各行。然后用循环语句输出指定的数组元素。其中*a[i]表示i行0列元素值,*(*(a+i)+i)表示i行i列的元素值,*pa[i]表示i行0列元素值;由于p与a[0]相同,故p[i]表示0行i列的值,*(p+i)表示0行i列的值。

需要注意的是指针数组和二维数组指针变量是有区别的。这两者虽然都可用来表示二维数组,但是其表示方法和意义是不同的。二维数组指针变量是单个的变量,其一般形式中“(*指针变量名)”两边的括号不可少。而指针数组类型表示的是多个指针(一组有序指针)在一般形式中“*指针数组名”两边不能有括号。

例如:

int(*p)[3];

表示一个指向二维数组的指针变量。该二维数组的列数为3或分解为一维数组的长度为3。int*p[3]表示p是一个指针数组,有三个下标变量,p[0]、p[1]、p[2],均为指针变量。

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

我要反馈