二维数组作函数参数

二维数组名作为参数传递使用时,形参要定义为数组指针的形式:

二位数组名就是数组指针类型

int func(int (*p)[n],int len1,int len2)

n一定要是一个常数值,即指明数组指针变量指向有几个元素的一维数组

一维数组名和二位数组名的比较

一维数组数组名类型是指针:

int arr1[10];

arr1-----int *

二维数组数组名类型是数组指针(而且必须指明一维数组元素个数):

int arr2[2][10];

arr2-----int (*)[2]

一维数组名本身就是第0个元素的首地址,指向的是首个元素

arr1+1,地址跳到下一个元素地址,

<一维数组名步长是元素步长>

二维数组名本身是一个数组指针,指向的是第一行的一维数组

arr2+1,指向下一行

<二位数组名步长是整行的步长>

二维数组作函数参数使用的两种方式:

int arr[][3]={1,2,3,4,5,6,7,8,9};
        display1(arr[0],9);
        display0(arr,3,3);
 

1,二维数组拆分为多个连续的一维数组(二维数组存储每一个元素本来就是连续存储),传递

传递这些连续内存的第一个地址

void display1(int* p,int len)
{       
        int i,j;
        for(i=0;i         {         
                  printf("%d\n",*p);
                  p+=1;
        }
}
 

2,在理解了二维数组名的类型之后,直接传递二维数组名

void display0(int (*p)[3],int len1,int len2)
{
        int i,j;
        for(i=0;i         {
                for(j=0;j                 {
                        printf("%d\t",p[i][j]);

                        //printf("%d\t",*(*(p+i)+j))
                }
                printf("\n");
        }
}
 

你可能感兴趣的:(c语言,c++,算法)