指针数组和指向指针的指针 指针数组的概念一个数组的元素值全为指针则是指针数组。指针数组是一组有序的指针的集合。指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。指针数组说明的一般形式为: 类型说明符*数组名[数组长度] 其中类型说明符为指针值所指向的变量的类型。例如: int *pa[3] 表示 pa是一个指针数组,它有三个数组元素,每个元素值都是一个指针,指向整型变量。【例 】通常可用一个指针数组来指向一个二维数组。指针数组中的每个元素被赋予二维数组每一行的首地址,因此也可理解为指向一个一维数组。 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)); }本例程序中,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] 均为指针变量。指针数组也常用来表示一组字符串,这时指针数组的每个元素被赋予一个字符串的首地址。指向字符串的指针数组的初始化更为简单。例如在例 中即采用指针数组来表示一组字符串。其初始化赋值为: char *name[]={"Illagal day", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}; 完成这个初始化赋值之后, name[0] 即指向字符串"Illegal day" ,name[1] 指向"Monday"...... 。指针数组也可以用作函数参数。【例 】指针数组作指针型函数的参数。在本例主函数中,定义了一个指针数组 name , 并对 name 作了初始化赋值。其每个元素都指向一个字符串。然后又以 name 作为实参调用指针型函数 day_name ,在调用时把数组名 name 赋予形参变量 name ,输入的整数 i作为第二个实参赋予形参 n 。在 day_ name 函数中定义了两个指
指向指针的指针 来自淘豆网m.daumloan.com转载请标明出处.