为了账号安全,请及时绑定邮箱和手机立即绑定

为什么c中二维数组声明只能省略行数?

为什么c中二维数组声明只能省略行数?

C
人心可畏1 2016-07-01 16:53:16
查看完整描述

4 回答

?
asd8532

TA贡献143条经验 获得超187个赞

   将二维数组当作参数的时候,必须指明所有维数大小或者省略第一维的,但是不能省略第二维或者更高维的大小,这是由编译器原理限制的。事实上,编译器是这样处理数组的:
      设有数组int a[m][n],如果要访问a[i][j]的值,编译器的寻址方式为:
     &a[i][j]=&a[0][0]+i*sizeof(int)*n+j*sizeof(int); //注意n为第二维的维数,

因此,可以省略第一维的维数,不能省略其他维的维数。

    在定义二维数组的时候对其进行初始化,也可以省略第一维,编译器会根据你的初始化语句自动决定第一维度。


查看完整回答
5 反对 回复 2016-07-01
  • 人心可畏1
    人心可畏1
    还是不懂,原因
  • 袏冄
    袏冄
    我觉得你不要看sizeofint就看i*n+j就好了,这不就没用到m也就是第一维么。
  • 了了二十二
    了了二十二
    n不确定无法找到地址,那i也不确定啊,这又是怎么找到地址的呢
点击展开后面1
?
玄幻痴迷

TA贡献2条经验 获得超2个赞

  1. 二维数组存储的时候是"先行后列",, 如果不指定列数, 它就不能知道一行放几个数据了。

  2. 在初始化的时候,第二维的数字代表分配内存的长度,第一维的数字代表分配内存倍数
    倍数可以让机器去数,但长度没有的话就不好开辟空间了。

查看完整回答
1 反对 回复 2018-01-07
?
小雾3378873

TA贡献5条经验 获得超0个赞

那就先把他放下,别太纠结,等把寻址等相关知识掌握了,再返过头来看,就会明白了,实际上我也没看懂,^_^等我学到后面知识后一定会来看!

查看完整回答
反对 回复 2016-07-01
  • 4 回答
  • 2 关注
  • 8201 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信