二维数组

二维数组

1.二维数组与二维数组的初始化
   二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,类型说明符:数组名[常量表达式][常量表达式]。 二维数组行优先。

   二维数组的初始化,代码1表示如下:


#include 
int main()
{
	int brr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
	int crr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
	printf("%d,%d\n",&crr[0][4],&crr[1][0]);
	printf("%d\n",crr[1][5]);//10// 即crr[2][1]

	int drr[3][4] = {1,2,3,4,5};
	int err[3][4] = {0,0,0,0,0,0,0,0,0,1};
	int frr[][4] = {1,2,3,4,5,6,7,8,9,10};
}

二维数组_第1张图片

要验证二维数组是否可以转化为一维数组: 二维数组_第2张图片
                                                                   图1.
  
    在代码1中运行printf("%d,%d\n",&crr[0][4],&crr[1][0]); 运行输出发现crr[0][4]与crr[1][0]地址相同,说明二维数组可以转化为一维数组。

2.二维数组与一位数组的比较

如图2所示
二维数组_第3张图片
                                                                          图2.

Ps:对于一些复杂的定义,判断它是指针是数组还是函数,我们可以通过以下来判断。
首先,通过优先级判断来确定它属性.
               int (*p)[4]  //  ()的优先级大于[],   因此p先于*结合,    (*p)是一个指针
               int *p[4]    //  *的优先级小于[],    因此p先于[]结合, p[4]是一个数组
               int (*p)()   //   ()两个优先级相同, 因此从左到右按顺序执行,(*p)是一个指针
               int *p()     //    ()优先级高于*,    因此p先于()结合, p()是一个函数
然后,考虑: 如果是指针,则考虑指针指向的内容
                    如果是数组,则考虑数组的数据类型和长度
                    如果是函数,则考虑函数的参数列表和返回值
               int (*p)[4]  //  指向数组的指针(数组指针)
               int *p[4]    //   指向指针的数组(指针数组)
               int (*p)()    //    指向函数的指针(函数指针)
               int *p()      //    指向指针的函数 (指针函数)

3.二维数组的打印

#include 
void Print(int (*arr)[4],int ra,int col)
{
	for(int i=0; i

你可能感兴趣的:(c)