指针数组和数组指针

int main(){
    int arr1[] = { 1, 2, 3, 4, 5 };
    int arr2[] = { 2, 3, 4, 5, 6 };
    int arr3[] = { 3, 4, 5, 6, 7 };
    int * parr[] = { arr1, arr2, arr3 };
    int i = 0;
    for ( i = 0; i < 3; i++)
    {
        char j = 0;
        for ( j = 0; j < 5; j++)
        {
            printf(" %d", *(parr[i] + j));      
            //因为数组存到内存中存的是首元素地址,
            //因此说存在parr[]指针数组中的arr1~其实都是首元素地址
            //指针运算+1, 就能跳到第二个元素中了    parr[1]+1
        }
        printf("\n");
    }

    return 0;
}

int main()
{
    char a[] = { 1, 2, 3, 4, 5, 6 };
    char b[] = { 2, 3, 4, 5, 6, 7 };
    char* arr[5] = {a, b};    //arr优先和[5]结合造成数组,类型是char*,
    //因此说这是个指针数组
    //存放指针的数组叫指针数组
    //存放数组的指针叫数组指针
    char* (*p)[5] = &arr;     
    //(*p)指的是让*先和P结合变成个指针,
    //而后解出来与[5]结合造成数组指针.类型是char*

    int i = 0;
    for ( i = 0; i < 2; i++)
    {
        int j = 0;
        for ( j = 0; j < 6; j++)
        {
            printf("%d", *(*p)[i] + j);
        }
        printf("\n");
    }

    return 0;
}
相关文章
相关标签/搜索