指针数组和多重指针
标签: C语言
学习人数: 10.8k

什么是指针数组

一个数组的元素值为指针则是指针数组。 指针数组是一组有序的指针的集合。 指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。

指针数组说明的一般形式为:

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

其中类型说明符为指针值所指向的变量的类型。

例如:

int *pa[3]  

表示 pa 是一个指针数组,它有三个数组元素,每个元素值都是一个指针,指向整型变量。

 

【例】通常可用一个指针数组来指向一个二维数组。指针数组中的每个元素被赋予二维数组每一行的首地址,因此也可理解为指向一个一维数组。

#include <stdio.h>  
  
int main(){  
    int a[3][3] = {1,2,3,4,5,6,7,8,9};  
    int *pa[3] = {a[0],a[1],a[2]};  
    int *p = a[0];  
    int i;  
    for(i = 0; i < 3; i++)  
        printf("%d,%d,%d\n", a[i][2-i], *a[i], *(*(a+i)+i));  
    for(i = 0; i < 3; i++)  
        printf("%d,%d,%d\n", *pa[i], p[i], *(p+i));  
    return 0;  
}  

本例程序中,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]均为指针变量。

指针数组也常用来表示一组字符串,这时指针数组的每个元素被赋予一个字符串的首地址。指向字符串的指针数组的初始化更为简单。例如在例 10.32 中即采用指针数组来表示一组字符串。其初始化赋值为:

char *name[] = {  
        "Illegal day",  
        "Monday",  
        "Tuesday",  
        "Wednesday",  
        "Thursday",  
        "Friday",  
        "Saturday",  
        "Sunday"  
    };  

完成这个初始化赋值之...

登录查看完整内容


课后作业

掌握本节内容


登录后开始许愿

暂无评论,来抢沙发