我正在读一本关于C编程的书,我不确定书中是否有错误。它关于数组并有以下数组示例:
然后它说:
以下语句将数组第2行中的所有元素设置为零:
for( column = 0; column <= 3; column++) a[ 2 ][ column ] = 0;
前面的for语句等同于赋值语句:
a[ 2 ][ 0 ] = 0; a[ 2 ][ 1 ] = 0; a[ 2 ][ 2 ] = 0; a[ 2 ][ 3 ] = 0;
不应该说&#34;以下语句将第1行中的所有元素设置为零&#34; ?.因为如果我说[3]我说的是第2行,如果我说[2]我说的是第1行,如果我说[1]我说的是第0行。
答案 0 :(得分:1)
我认为这本书意味着数组中实际上有3行:#0,#1,#2。他们正在修改第2行第2行。
答案 1 :(得分:1)
C使用row-major order和从零开始的索引来引用数组索引。您提供的有关本书内容的说明与此一致。
答案 2 :(得分:1)
不应该说“以下语句将第1行中的所有元素设置为零”。
否即可。它不应该。在C中,数组索引从0
开始。在第196页的同一本书中,作者说:
每个数组中的第一个元素是第零个元素。因此,数组c的第一个元素称为c [0],...
答案 3 :(得分:0)
作者似乎是从零开始计算,就像数组如何从索引0而不是c中的索引1开始一样。
正如其中一条评论所问:你的意思是想知道作者是否应该说&#34;第3行&#34;而不是&#34;第2行和第34行;因为行被索引2,所以数组中的第三行是什么?
无论如何,书中没有错误。
答案 4 :(得分:0)
哪一行是“第2行”是一个惯例问题。您发布的图片非常明确且明确地确定了约定:行从0开始编号。这意味着a[0][i]
引用第0行中的元素,而a[2][i]
引用第2行中的元素。因此我在那句话中看不出任何错误。
而且,我看不出在任何有意义的约定下它怎么可能是“第1行”。看到有人称之为“第3行”,而不是“第1行”,我不会感到惊讶......为什么“第1行”?你的断言“如果我说[3]我说的是第2行,如果我说[2]我说的是第1行,如果我说[1]我说的是第0行”< / em>遇到同样的问题。我没有看到任何逻辑。