c语言文件指针怎么移动 为什么我觉得C语言中二维数组没用,明明两个一维数组就能解决,为什么要有二维数组存在?
为什么我觉得C语言中二维数组没用,明明两个一维数组就能解决,为什么要有二维数组存在?
我也来说说。
C语言没有专门的二维数组
首先,C语言中,基本类型里有“数组”,也就是一维数组。而我们平时所说的二维数组是元素为数组的数组,其实是一种用一维数组对二维数组的模拟。
一维数组可以解决多维问题
从底层实现来说,无论是一维数组、二维数组还是多维数组,在内存中都是以一维方式排列的。而多维数组也是用一维数组模拟实现的。从这一点来说,一维数组就能解决多维数组的问题。常见的模拟方式:
将 二维数组a[m][n]表示为一维数组a[m*n]
用a[y*n x]代替a[y][x]
注意这里是用一个一维数组代替二维数组,而不是用两个一维数组代替二维数组
多维数组有其存在的必要
从代码清晰易读的角度来说,二维数组、多维数组是有意义的。有许多数据是适合用二维数组或多维数组表示的。以适合的方式表示数据,算法的编写也会简洁明了。典型的适合二维数组表示的数据如平面图形、矩阵。用二维数组表示,程序清晰易读;如果用一维数组表示,其可读性就会低不少。
相对于汇编语言,C提供了一定的数据抽象,如数组、结构体(struct)、联合(union)。其实没有这些抽象,程序照样能编。但C语言的好处就在这里,它提供的抽象程度,非常适合系统级程序开发和维护。如果觉得C语言提供的抽象程度过高,也许汇编更适合您的项目,如果觉得C语言提供的抽象程度过低,那选择就多了,从C ,Java到现在的各种新语言,都可以尝试更换。
如何在c语言二维数组中使用指针?
对于a[i][j](二维数组的大小为n×m)而言,首先要搞清楚行指针和列指针行指针:&a[i]或者a i指向行,&a[i]=&*(a i)=a i列指针:a[i]或*(a i)指向列,a[i]等价于*(a i)元素的引用方式有如下三种方式1.通过地址引用二维元素*(&a[i][j]),*(a[i] j),*(*(a i) j),*(a[0] m*i j)*(&a[0][0] m*i j)(*(a i))[j]2.建立一个指针数组引用二维元素int *p[3],a[3][2],i,jfor(i=0imain(){int score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}}int i,jprintf("输入学生号:0-2")scanf("%d",&i)printf("the score of No.%d are:n",i)for(j=0jmain(){int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}int *pfor(p=a[0]p
main(){int score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}}int i,j printf("输入学生号:0-2")scanf("%d",&i)printf("the score of No.%d are:n",i)for(j=0jmain(){int score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}}int i,j,*p printf("输入学生号:")scanf("%d",&i)printf("the score of No.%d are:n",i)for(p=score[i]p
C语言中的二维数组名是一个二重指针吗?
1、二维数组名不是二级指针,它只是一个比较特殊的常量指针。包括三维,四维,乃至N维数组也是如此。只要是数组,那么它就是一个普通的常量指针。2、二级指针p也可以解释为指针的指针,即p内保存的值实际上还是一个指针,计算:*p的值实际上是一个指针值,那么 *(*p)即二级指针指向的最终值。对于二维数组a[2][2],a也是一个地址,并且这个值也等于a[0],也等于a[0[0]的地址,即&a[0][0],由此看来对a取地址的值是一个变量值(不是指针),所以a并不是一个二级指针,最多算一个一级指针。
c语言文件指针怎么移动 c语言二维数组下标 用指针输入二维数组
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。