DW___的博客

菜鸟程序猿

二维数组

二维数组

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

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


#include <stdio.h>
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.
  
    在代码1中运行printf("%d,%d\n",&crr[0][4],&crr[1][0]); 运行输出发现crr[0][4]与crr[1][0]地址相同,说明二维数组可以转化为一维数组。

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

如图2所示
                                                                          图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 <stdio.h>
void Print(int (*arr)[4],int ra,int col)
{
	for(int i=0; i<ra; i++)
	{
		for(int j=0; j<col; j++)
		{
			printf("%5d",arr[i][j]);
		}
		printf("\n");
	}
}
int main()
{
	int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
	Print(arr,3,4);
}

阅读更多
个人分类: c
上一篇字符串崩溃原因
下一篇递归函数
想对作者说点什么? 我来说一句

CStringArray二维数组

2010年11月19日 2KB 下载

new delete二维数组

2011年06月26日 399B 下载

动态二维数组 c#编程

2011年06月27日 16KB 下载

javascript构造二维数组

2011年09月03日 714B 下载

程序 二维数组

2013年12月16日 3KB 下载

java 二维数组的创建与使用

2010年06月18日 59KB 下载

一个二维数组的应用范例

2012年12月18日 2KB 下载

没有更多推荐了,返回首页

关闭
关闭