int main ()
{
    void swap(int array[3][3]);
    //这里用一下刚学的指针
    //void f(int a[3][3]);
    int a[3][3],i,j;
    int (*p)[3];
    /**************************
    必须有个(*p) 如果是int *p[3]就是一个全是指针的数组
    ***************************/
    p=a;//把第零行的首个元素的地址给p
    printf("请给3*3的数组赋值\n");
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
    {
        scanf("%d",(*(p+i)+j));
    }
    printf("输入数组为\n");
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("%2d  ", *(*(p+i)+j));
        }
        printf("\n");
    }
    swap(a);
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("%2d  ", *(*(p+i)+j));
        }
        printf("\n");
    }
    return 0;
}
void swap(int array[3][3])//参数是一个数组  调用的话 把数组名给给就好了
{
    int temp,i,j;
    int (*p)[3];
    p=array;
    for(i=0;i<3;i++)
        for(j=i+1;j<3;j++)//如果j=0的话那就又换回去了
        {
            temp= *(*(p+i)+j);
            *(*(p+i)+j)= *(*(p+j)+i);
            *(*(p+j)+i)= temp;
        }
    printf("swap over ^_^\n");
}
   /*************
    int *p[4]; //定义一个指针数组(个人理解 偏意词语偏向后面的词),该数组中每个元素是一个指针,每个指针指向哪里就需要程序中后续来再定义了。
    int (*p)[4]; //定义一个数组指针,该指针源指向含4个元素的一维数组(数组中每个元素是int型)。
    区分int *p[n]; 和int (*p)[n]; 就要看运算符的优先级了。
    int p[n]; 中,运算符[ ]优先级高,先与p结合成为一个数组,再由int说明这是一个整型指针数组。
    int (*p)[n]; 中( )优先级高,首先说明p是一个指针,指向一个整型的一维数组。

    原文博客:https://blog.csdn.net/weixin_44720916/article/details/105621896
    ***************************/

    /******************************
    指针上加减1等于他存的地址加减他存的一个单位元素所占的字节长度
    *取值操作符,&取址操作符
    ********************************
    说明:
    现有一个一维数组,那么a就是首元素的地址,现在有一个
    二位数组,那么 a指的是第0行的首元素的地址(a可以看成指针
    但是数组字母虽然表示指针但是他是不能修改的左值即不能执行++运算等),
    *********************************
    (可以把二维数组看成一维数组的数组),再简单来看假如有数组int a[3][3]
    那么 可以看成一个一维数组b[3]有三个元素,一个元素长(int 4字节)4*3字节
    那么a+1()指的是第1行的元素第0个元素地址&a[1][0]
    a+2()指的是第2行的第0个元素地址 &a[2][0]

    a[1]+1那指的是第行第一列的元素地址&a[1][1]

    a[1]等价于*(a+1)
    *************************
    信息来源于博客,以及个人理解
    https://blog.csdn.net/zj490044512/article/details/86353764
    *******************************
    那么再来说明指针数组
    int(指向数组类型) *p[二维数组的列数(一行的长度)]
    在深入一点就是可以分解成多少个一维数组,该一维数组的长度
    *(*(p+i)+j)指的是第i行第j列的元素的值
    ******************************/

有误请评论

努力成长的程序员