C/C++二维数组(数组指针)——二维数组的传值和二维数组的一维访问

来源:互联网 发布:双肩背包 知乎 编辑:程序博客网 时间:2024/06/14 21:29

二维数组既可以通过二维访问也可以通过一维访问。

对于二维数组的传值,引进了数组指针。


#include <stdio.h>void foo(int *p,int n)//一维访问{    for(int i=0;i<n;i++)        printf("%d ",p[i]);    printf("\n");}//因为二维数组的列数必须初始化void func(int (*p)[4],int n)//引入数组指针来传递二维数组{    for(int i=0;i<n;i++)    {        for(int j=0;j<4;j++)        {            printf("%d\t",p[i][j]);//*(*(p+i)+j)        }        putchar(10);    }    putchar(10);}int main(){    int arr[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};    //一维访问    int *p=(int*)arr;//既可以通过二重循环访问,也可以通过一重循环访问    foo(p,12);//通过一维传递    for(int i=0;i<12;i++)        printf("%d ",p[i]);    printf("\n");    //二维访问    func(arr,3);    for(int i=0;i<3;i++)    {        for(int j=0;j<4;j++)        printf("%d\t",arr[i][j]);//*(*(arr+i)+j)        putchar(10);    }    return 0;}


二维可以转一维访问,那么一维同样可以转二维访问:

#include <stdio.h>int main(){//    int arr[10];//    int *p = arr;//    int **pp = &arr;//错误    int arr[12]={1,2,3,4,5,6,7,8,9,10,11,12};    int (*p)[4]=(int(*)[4])arr;    for(int i=0;i<sizeof(arr)/sizeof(int[4]);i++)    {        for(int j=0;j<4;j++)        {            printf("%d\t",p[i][j]);        }        putchar(10);    }    return 0;}




0 0
原创粉丝点击