问题描述
- 二维数组的输入i的下标问题
-
for(i = 1;i < row;i++){ 这句话不应该是for(i = 0;i < row;i++)怎么从1开始
解决方案
起始值根据需要来设定,i=1时第一行数据不输入。如
#include
int main(void)
{
int i = 0;
int j = 0;
int array[3][3] = {0}; //如果没有全部初始化为0,第一行输出则为一个不确定的值。根据编译器的情况而定,有的编译器会自动给数组初始化为0.
for(i= 1;i
{
for(j = 0;j
{
array[i][j] = i+j;
}
}
for(i= 0;i
{
for(j = 0;j
{
printf("%d",array[i][j]);
}
printf("n");
}
return 0;
}
Output:
000
123
234
如果没有初始化//codepad在线编译器下编译
#include
int main(void)
{
int i = 0;
int j = 0;
int array[3][3] = {0};
for(i= 1;i<3;i++)
{
for(j = 0;j<3;j++)
{
array[i][j] = i+j;
}
}
for(i= 0;i<3;i++)
{
for(j = 0;j<3;j++)
{
printf("%d",array[i][j]);
}
printf("n");
}
return 0;
}
Output:
-143098616 -143100480 -143207760
123
234
]
解决方案二:
这不好说,也许第一行是表头,或者作为参照数据,比如计算两行的差之类的,需要忽略。
解决方案三:
是否从1或者其它数字开始都没有关系的,关键在于循环中的代码是如何实现的。
例如:循环中可以使用 i - 1 做下标,这样从 1 开始就是正常的 。
解决方案四:
和一维数组同样的道理,第一个元素的地址为数组的头地址,相当于base+0,这样向下访问一直到 base+num-1的地址。二维的与一维是同样的思路
解决方案五:
从 i=1 开始,就是从第二个元素开始处理,第一个元素不处理。i<row,保证循环中下标不会越界,写成i<=row-1也是可以的。
没有硬性规定for循环中 下标一定要从i=0开始。 只要下标不越界,代码怎么写都没问题。至于i从什么值开始,什么值结束,这个要看具体的应用场景和业务需求。
解决方案六:
能发现这个问题很好,说明你还是适合写代码的
从1开始处理,第0行不处理,肯定是有他的意义的
要仔细分析代码的上下文,应该看出来他为什么不处理第0行
如果分析不出来,就是写代码的人的问题了,问他就可以了
解决方案七:
能发现这个问题很好,说明你还是适合写代码的
从1开始处理,第0行不处理,肯定是有他的意义的
要仔细分析代码的上下文,应该看出来他为什么不处理第0行
如果分析不出来,就是写代码的人的问题了,问他就可以了