c语言 指针数组


指针数组简介

一系列有次序的指针变量集合成数组就形成了指针数组。
指针数组是指针的集合,其中每个元素都是一个指针变量,并且它们具有相同的存储类型和相同的数据类型。
例:
<存储类型> <数据类型> *指针数组名[元素个数];
同普通数组一样,指针的数组名就表示指针数组存储的首地址。
例:
int *a[2];
//以上说明*a[2]指针数组由a[0] a[1] 两个指针组成,它们都指向int 型数据 .


指针数组定义

由于指针数组和普通变量具有相同的存储类型和数据类型,指针数组存储在一般内存区域这两种属性,所以指针数组的定义和普通类型变量的定义方式一样。
例:
int a1,*a2,*a3[10];


指针数组的使用


指针数组通常用来处理多维数组。

例定义一个二维数组:
int b[2][3];
二维数组可以分解为b[0] b[1] 两个各含3个元素的一维数组,若采用一个指针数组,则可以采用 int *b[2];即把b[0] b[1]的首地址放入指针数组中,形成一个指针数组。


#include "stdio.h"       
int main(){
     int i=0;
     int j=0;
     int a[2][3]={{1,2,3},{4,5,6}};
     int *b[2];
     b[0] =&a[0][0];
     b[1] =&a[1][0];
     
    printf("b[0] address is %d\n",b[0]);
    printf("b[1] address is %d\n",b[1]); 
    
     for(i=0;i<2;i++)
      for(j=0;j<3;j++)
        printf("a[%d][%d] :%d\n",i,j,*b[i]++);
     

    printf("b[0] address is %d\n",b[0]);
    printf("b[1] address is %d\n",b[1]);
} 

[root@localhost ~]#./t
b[0] address is 1557806128
b[1] address is 1557806140
a[0][0] :1
a[0][1] :2
a[0][2] :3
a[1][0] :4
a[1][1] :5
a[1][2] :6
b[0] address is 1557806140
b[1] address is 1557806152