数组指针与指针数组

一、数组指针是指向数组的一个指针,例如int (*p)[4];,表示的是p指向拥有4个元素的数组的指针,p是指向一维数组的首地址。

int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int (*p)[4];

(*p)[0]保存的元素1,p+1表示指针位置下移一行,*(p+2)+3表示的是第二行第三列元素的地址,即&a[2][3],*(*(p+2)+3)表示的是第二行第三列元素的值,即a[2][3]。

代码示例如下:

void arraypointer()//数组指针应用
{
    int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    int (*p)[4];
    int row,col;
    p=a;
    for(row = 0; row < 3; row++)
    {
        for(col = 0; col < 4; col++)
        {
            printf("a[%d,%d] = %-4d",row,col,*(*(p+row)+col));
        }
        printf("\n");
    }
}

二、指针数组是一个数组,数组中的元素是指针类型的数据。定义如下:int *p[4],由于[]的优先级比*高,p与[]优先结合,形成平p[]的数组,然后与*结合,表明数组是指针类型,保存的是指针类型的变量。

代码示例如下:

void pointerarray()//指针数组应用
{
    char *book[4] = {"C PROGRAMMING LANGUAGE",
        "ASSEMBLY LANGUAGE","JAVA LANGUAGE",
        "NATURAL LANGUAGE"};
    int n = 4;
    int row;
    char *ptr;
    for(row = 0; row < n; row++)
    {
        ptr=book[row];
        printf("%s\n",ptr);
    }
}

 

posted @ 2013-12-01 12:20  neuzxy  阅读(153)  评论(0编辑  收藏  举报