您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
为什么我觉得C语言中二维数组没用,明明两个一维数组就能解决,为什么要有二维数组存在?
数组,多维,语法为什么我觉得C语言中二维数组没用,明明两个一维数组就能解决,为什么要有二维数组存在?
发布时间:2016-12-08加入收藏来源:互联网点击:
回答于 2019-09-11 08:43:50
两个一维数组明明不可以取代二维数组,你为什么还理直气壮地质问?
3行4列矩阵,有12个元素,用一维数组的话,可以三个一维数组,每个数组四个元素。
还可以用一个一维数组,计算下标。如第二行第三列存储在第七号位置。
二维数组可以用几个一维数组表示,也可以用一个一维数组表示,但都不够直观。
说两个一维数组代替一个二维数组混淆了维数和个数的概念。
回答于 2019-09-11 08:43:50
当然不一样 逻辑概念更好的表示 算法的阅读上更好的理解 你一维是都能实现 那在逻辑理解上能一样吗? 如果只是实现就可以了 还要高级语言干啥用 都用汇编甚至机器语言本身就完了
回答于 2019-09-11 08:43:50
这样说就容易理解了,二个一维数组等于两条线,是在两条线上分别存m和n个数据。
一个二维数组则是一个面,即m个线,毎条线上n个数据,理论上每条线数据是相等的(包括空值),可以精确定位,如第5条线上的第7个数据。
回答于 2019-09-11 08:43:50
10+10 10*10的区别
回答于 2019-09-11 08:43:50
二维数组用来做矩阵运算最理想,所有图像处理软件都需要用到卷积运算,矩阵是必不可少的数据类型。
回答于 2019-09-11 08:43:50
要你这么说
数组也没用了
一万个变量就能解决的事
实在不行,就十万个变量好了^0^~[呲牙]
回答于 2019-09-11 08:43:50
建议你放弃编程吧,这样学下去浪费时间,去学学炒菜挺好的,说不定能成为一代大厨
回答于 2019-09-11 08:43:50
您说的没错,不止是2维数组可以用两个一维数组来替代,N维数组也可以用两个一维数组来替代。事实上,不管数组是多少维的,它都是一段连续的内存,用一个指针数组指向各维数组的首地址就可以完全可以替代多维数组:
int a[5][2]; //一个二维数组
int a[10]; //具有相同元素个数的一维数组
int (*b) [2]; //存放维度指针的数组
b[0]=\u0026a[0];
b[1]=\u0026a[5];
那么问题来了,既然有等价的方法,为什么要设计这种冗余的语法呢?这就要从编程语言的语法和语义说起了。
语法-描述程序的样子
语法是程序编制的规则。它主要由变量类型、运算符号、语句等几部分构成。程序编译的时候,语法解析器会把程序转换成语法树,以确保所有代码均符合语法规则。
语法只关注代码的格式,并不在乎代码在执行时是否会出现问题。比如,“a=1/0;”这样的问题,就不属于语法的问题,一般不会被语法解析器提示错误。从语法角度上说,N维数组的语法和一维数组的语法是不同的。要想知道为什么要设计出这样两种不同的语法还需要理解他们的语义。
操作语义-计算机上的执行过程
语义有很多种,我们先来看看操作语义。操作语义是描述一段程序在计算机上的处理过程的。比如,a=(1+2)+(3+4);就表示先计算1+2=3,再计算3+4=7,再计算3+7=10,最后把10赋值给变量a,这样的操作过程。事实上,我们用两个一维数组代替一个N维数组的做法,并没有改变处理过程。只不过我们代替编译器把本来隐含的指针操作明示化了而已。如果我们足够了解编译器,我们完全可以让两种不同语法的代码编译出一样的结果(就是说编译出的汇编码是相同的)。题主的疑惑大概也就在这一点上吧。既然,两种语法在操作上可以等价,为什么要保留这种语法上的冗余呢?接下来我们再从指称语义的角度上看看这个问题。
上一篇:和喜欢的女孩聊天总脑袋空白,有时候她发的一个消息我总是要过了好久才能想到一个回答,我该怎么办?
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |