C语言的二维数组、及多维数组的降维
来源:互联网 发布:ubuntu复制文件到win 编辑:程序博客网 时间:2024/06/06 05:41
二维数组可以理解为一个二维表格,也类似于一个由指向行数组的指针构成的一维指针数组。因此,二维数组(包括高维)可以进行降维,最后变成一维数组。
二维数组的定义形式:数据类型 标识符[ ] [ ]
第一维一般称为“行”,第二维称为“列”。比如: float array[3][4]。
二维数组的初始化。
1. 将所有数据写在一个大括号内,如:
array[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
数组逐行、逐列顺序地被赋予上述数值。
2.分行赋值
array[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
一行一个大括号,以此类推。这种方式最直观。如果写成以下形式,则更为直观:
int sqrs[5][2] = { 1,1, 2,4, 3,9, 4,16, 5,25};//初始化多维数组时,可以在每维初始化字符的前后加上花括号,这叫做“子集分组”int sqrs[5][2] = { {1,1}, {2,4}, {3,9}, {4,16}, {5,25}};
3.部分赋值。原则是从前往后优先赋值,后面没有赋值到的自动赋值为0。
array[3][4]={{1,2},{8},{9,10}};
这种赋值方式下,数组的元素分布情况为:
1,2,0,0
8,0,0,0
9,10,0,0
下例将数值1-12装入一个3行4列的二维数组,然后将其按行打印出来。
#include <stdio.h>main(){int t,i,num[3][4];//用2个循环给二维数组num进行赋值for(t=0;t<3;++t)for(i=0;i<4;++i)num[t][i]=(t*4)+i+1;//用2个循环将二维数组的值逐项进行输出for(t=0;t<3;++t){for(i=0;i<4;++i)printf("%3d",num[t][i]);printf("\n");}}
运行结果:
把二维数组作为函数的变元时,实际只传送指向数组第一个元素的指针。然而,在接收二维数组变元的函数中,至少应该定义第二维的长度,因为C编译程序必须了解每列的长度后才能正确地对数组进行下标操作。例如,接收10、10二维数组的函数必须定义成:
void fun1(int x[][10])
{
/*......*/
}
编译程序必须了解第二维的准确长度,否则无法确定第二行从哪里开始。
因为二维数组可以被看做由指向行数组的指针构成的一维指针数组,因此,使用指针变量是访问二维数组元素的简便方法。以下函数说明了这一技术,并为全局整形数组num的指定行输出内容:
int num[10][10]/* ... */void pr_row(int j){ int *p, t; p=(int *)&num[j][0]; //获取j行第1个元素的地址 for(t=0;t<10;++t) printf("%d",*(p+t));}
通过产生调用变元为行号、行长和指向第一个元素的指针,可以把以上程序变成通用子程序:
void pr_row(int j,int row_dimension,int *p){ int t; p=p+(j * row_dimension); for(t=0;t<row_dimension;++t) printf("%d",*(p+t));}/* ... */void f(void){ int num[10][10]; //打印出第一行 pr_row(0,10,(int *)num);}
多于二维的数组也可以通过类似方法降维处理。例如,三维数组降成指向二维数组的指针,二维数组再进一步降成指向一维数组的指针。归纳之,n维数组可以降为一个指针和一个(n-1)维数组;新(n-1)维数组同样可降为一个指针和一个(n-2)维数组;以此类推,直到降成一维数组位置。
- C语言的二维数组、及多维数组的降维
- 9、C语言中二维数组及数组名及指向二维数组的指针变量
- C语言--关于二维数组,字符串数组,多维数组
- C语言--二维数组,字符串数组,多维数组
- C语言编程5 二维数组、字符串数组、多维数组
- 二维数组及多维数组
- C语言的二维数组
- C语言多维数组指针的技巧
- C 语言的动态多维数组
- C语言中多维数组的理解
- C语言中多维数组的理解
- C语言中多维数组的理解
- C语言指向多维数组的指针
- C语言指向多维数组的指针
- C语言指向多维数组的指针
- C语言指向多维数组的指针
- C语言一维数组和二维数组的使用
- java数组-二维数组及多维数组
- java获得项目绝对路径
- Swift-如何存储数据在本地
- vba基础打卡4
- maven 学习(二)
- ubuntu关机重启命令介绍
- C语言的二维数组、及多维数组的降维
- java8的日期API总结(JSR310)
- 转载-【实用】如何将sublime text 3 打造成实用的python IDE 环境
- PHP & AJAX 阅读器
- JS中的while循环
- 【量化小讲堂-Python&Pandas系列19】10年400倍策略分享(附视频逐行代码讲解)
- 关于pkg-config与LD_LIBRARY_PATH与/etc/ld.so.conf文件的区别与作用
- 游戏制作2——游戏策划与小结
- Unity Line Collider