- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我只是想知道为什么在将数组传递给函数时允许省略多维数组的最左边的索引?为什么不超过一个索引?以及编译器如何找出省略一个索引的大小?
最佳答案
其他答案描述了 C 标准如何处理数组到指针的转换以及这如何影响函数声明,但我觉得他们没有进入 为什么,所以我开始...
在 C 中,数组代表内存中紧密排列的元素。
A -> _ _ _ _ _ _ ...
i: 0 1 2 3 4 5 ...
在上面的例子中,每个数组元素都是 1 _
宽。为了找到第 i 个元素,我们必须去第 i 个地址。 (注意最左边的维度(大小)在这里无关紧要)
现在考虑一个多维数组:
B -> [_ _ _][_ _ _][_ _ _][_ _ _]...
i: 0 0 0 1 1 1 2 2 2 3 3 3
j: 0 1 2 0 1 2 0 1 2 0 1 2
^first row ^third row
要找到 A[i][j]
的偏移量,我们需要跳过 i 行 (3*i),然后跳过 j 个元素 -> (3*i + j)。注意这里也不需要第一个维度的大小。
现在应该清楚了,使用数组时不需要最左边的大小,只有在创建时才需要它。
既然没有需要给出最左边索引的维度,那为什么不给出呢,为了完整起见?毕竟,这是在 Pascal 编程语言(当代 C)中完成的。
嗯,大多数对数组进行操作的函数对所有可能的数组长度都一样,因此指定大小只会损害您重用它们的能力。
例如,为什么要这样做
int sum(int arr[10]){
int s = 0, i;
for(i=0; i<10; i++){
s += arr[i];
}
return s;
}
当您可以这样做时:
int sum(int arr[], int n){
int s = 0, i;
for(i=0; i<n; i++){
s += arr[i];
}
return s;
}
至于省略一个以上的维度,这在使用普通多维数组时是不可能的(因为您需要知道维度才能知道第一行何时结束,第二行何时开始)。但是,如果您愿意为暂存空间花费一些(少量)额外内存,则完全可以使用指向指针的指针:http://www.eskimo.com/~scs/cclass/int/sx9b.html
关于c++ - 为什么 c/c++ 允许在函数调用中省略多维数组的最左边索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5737905/
我正在开发一个需要在屏幕上查找对象的程序,到目前为止工作正常,但我遇到了多显示器配置问题。 GraphicsEnvironment.getLocalGraphicsEnvironment().getS
使用 mySql,我想列出客户对特定产品类别进行的所有购买。 所以,我有 3 个表:客户 (idCustomer, Name)、类别 (idCategory, CategoryName) 和订单 (i
我的网站上有一个关于 background-size:cover 的小问题我一直在 Firefox 中测试它,但是当我在谷歌浏览器中加载页面时,我在左边得到 1px 的白色。当我使用 backgrou
我已经搜索了几个小时来找到解决我的问题的方法,但没有成功。我遇到的问题是两个按钮的垂直堆叠。 这就是我想要做的:它说按钮在这里两次是我试图放置按钮的地方,但我所能做的就是让它们水平排列而不是垂直排列。
我有一个包含多个元素的导航栏。 Left1 Left2 Left3 Right1 Right2 Right3 我不知道如何将“fixedLef
您好,我正在尝试让 2 个 div 在左侧与右侧对齐。 #div1 #div2 #div1 #div2 #div3 #div2 #div3 #div3 诀窍是当浏览器窗口变小时,我希望#div2 位于
body { font-family: Arial, Helvetica, sans-serif; font-size: 13px;
这个问题在这里已经有了答案: In CSS Flexbox, why are there no "justify-items" and "justify-self" properties? (6
这是我的代码的 jsfiddle 链接: https://jsfiddle.net/Krisalay/zvxxeagh/ 我的 HTML 代码是: MESSAGE 1
所以我有 10 个复选框,每个标签都取自数组中相应的索引。我正在使用 ng-repeat 来展示它们: {{entity}}
我是一名优秀的程序员,十分优秀!