初学C\C++——指针与二维数组

时间:2019-02-16
本文章向大家介绍初学C\C++——指针与二维数组,主要包括初学C\C++——指针与二维数组使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.1二维数组

int buf[2][3] = {{1,2,3},{4,5,6}};
int (*p)[3] = buf;
//定义了一个数组指针,指向int[3]这个数组类型,指向二维数组的指针
//int *p[3]; 指针数组

//p++ 指向第二行
printf("%d\n",sizeof(buf));//24
printf("%d\n",sizeof(buf[0]));//12
printf("%d\n",sizeof(p));//4
printf("%d,%d\n",p,p+1);//3996804,3996816 一行12个字节

for(int i = 0; i < (sizeof(buf)/sizeof(buf[0]));i++)
{
    for(int j = 0; j < (sizeof(buf[0])/sizeof(int)); j++)
    {
        printf("%d\n",p[i][j]);
    }
}

1.2不允许使用数组下标,只能通过二维数组的指针求出数组中每行和每列的平均值

int buf[3][5] = {{23,33,21,37,56},{23,23,33,88,56},{14,21,64,21,44}};

int *p[5] = buf;

//行平均值
for(int i = 0; i < (sizeof(buf)/sizeof(buf[0])); i++ )
{
    int sum = 0;
    for(int j = 0; j < (sizeof(buf[0])/ sizeof(int));j++)
    {
        sum += *(*(p +i) + j)
    }
    printf("%d\n",sum/(sizeof(buf[0])/ sizeof(int)));
}

//列平均值

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